java 面向对象3

多态的概述

  • 一:多态(polymorphic)
    • 事物存在多种形态
  • 二:多态前提
    • 要有继承关系
    • 要有方法重写
    • 要由父类引用指向子类对象

多态中的成员访问特点 成员变量

* 成员变量 
	* 编译看左边(父类),运行看右边(父类)

编译是父类,运行结果也是父类

class Demo2_Polymorphic{
public static vodid main (String[] args){
Father f = new Son();
System.out.println(f.num);
	}
}
class Father{
	int num = 10;
}
class Son extends Father{
int num = 20;
}

上面代码输出结果为: 10

成员变量访问内存图

多态的成员访问特点 成员方法

  • 成员方法
    • 编译看左边(父类),运行看右边(子类)
      注释: 编译是否通过看的是父类,运行结果是子类。
class Demo2_Polymorphic{
public static vodid main (String[] args){
Father f = new Son();
f.print();
	}
}
class Father{
	int num = 10;
	public void print{
	System.out.println("Father");
	}
}
class Son extends Father{
int num = 20;
public void print("Son");
}

在这里插入图片描述

多态的成员访问特点 静态成员方法

  • 静态成员方法
    编译看左边(父类),运行看的 是左边(父类)
    静态和类相关,算不上重写,所以,访问还是左边的
    只有非静态的成员方法,编译看左边,运行看右边

向上转型和向下转型

Person p = new Student();//向上转型
Student s = (Student)p;//向下转型

多态的利弊

  • 多态 的 利:
    • 提高代码的维护性(继承保证)
    • 提高代码的扩展性 (由多态保证)
  • 多态的 弊:
    • 不能使用子类的特有属性和行为。

抽象类的概述和特点

  • 抽象类特点
    • 抽象类和抽象方法必须用abstract关键字修饰
      • abstract class 类名{}
      • public abstract void eat();
    • 抽象类不一定由抽象方法,有抽象方法的类一定是抽象类(接口的方法都是抽象方法)
    • 抽象类不能被实例化,所以可由多态的方式,由子类实例化。
    • 抽象类的子类
      • 要么是抽象类
      • 要么重写抽象类中的抽象方法

抽象类的成员特点

  • 成员变量:既可以是变量,也可以是常量。abstract不可以修饰成员变量
  • 构造方法: 抽象类是具有构造方法的(用于子类访问父类的数据初始化)
  • 成员方法:既可以是抽象的,也可以是非抽象的。

抽象方法的成员特性

抽象方法 强制要求子类做的事情
非抽象方法 子类继承的事情 提高代码的复用性

接口

  • 接口概述:
    • 从侠义的角度讲就是指java中的interface
    • 从广义上讲对外提供规则
  • 接口特点
    • 接口用关键字interface表示
      interface 接口名 {}
    • 类实现接口用implements表示
      class 类名 implements 接口名{}
    • 接口不能实践化
      以多态的方式来实例化
    • 接口的子类
      可以是抽象类,但是意义不大
      可以具体类。要重写接口中的所有抽象方法。

接口的成员特点

  • 接口成员特点
    • 成员变量:只能是常量(而且是默认是常量)
      * 默认修饰符:public static final
      * 最好自己给出
    • 构造方法:接口没有构造方法
    • 成员方法:只能是抽象方法
      * 默认修饰: public abstract
      * 建议自己给出

类与类 ,类与接口,接口和接口

  • 类和类 : 继承关系,只有单继承,可以多层继承
  • 类和接口:实现关系,可以单实现,也可以多实现。
  • 接口和接口: 继承关系可单继承,也可多继承

抽象类和接口的区别

(成员之间区别)

  • 抽象类:
    • 成员变量:可以变量,也可以是常量
    • 构造方法:有
    • 成员方法: 可以抽象,也可非抽象
  • 接口
    • 成员变量:只可以是常量
    • 成员方法:只可以是抽象的
      (关系之间区别)
  • 类和类:继承,单继承
  • 类和接口: 实现,单继承,多实现
  • 接口也接口:继承,单继承,多继承
    (设计理念区别)
  • 抽象类 被继承体现的是:”is a”的关系。抽象类中定义的是该继承体系的共性功能。
    • 接口 被实现体现的是:”like a”的关系。接口中定义的是该继承体系的扩展功能。

猜你喜欢

转载自blog.csdn.net/qq_40435621/article/details/84255435