定义:某一种事物的多种形态。
例:
猫类继承动物类。则猫具有两种形态,即动物与猫。
式子A定义变量普通赋值:猫 a = new 猫();
式子B定义变量多态赋值:动物 b = new 猫();
分析以上案例,在式子B中,父类的引用指向了子类实例对象。
多态的程序体现为父类或者接口的引用指向其子类对象或者实现类对象。
前提:
需要存在继承或者实现关系。
要有方法覆盖操作,否则没有意义。
父类或者接口的引用指向自己的子类对象。
优点:
开发当中要符合开闭原则:对修改关闭,对扩展开放。
多态的存在提高了程序的扩展性和后期可维护性。
成员函数:
编译时:要查看引用变量所属的类中是否有所调用的成员函数。
在运行时:要子类实例中的方法。
成员变量:只看引用变量所属的类。
向上向下转型:
向上转型:引用变量为父类时,子类实例对象可以自动提升为父类类型
向下转型:可以使用强制类型转换,完成向下转型
多态的表现形式
具体类多态(少见)
抽象类多态(常见)
接口多态(常见)
抽象定义:
抽象就是从多个事物中将共性的,本质的内容抽取出来。
例如:狼和狗共性都是犬科,犬科就是抽象出来的概念。
抽象类定义:
包含抽象方法的类就是抽象类。
抽象类不一定包含抽象方法。
类/抽象类不一定包含方法。
抽象类可以有非抽象方法。
抽象方法定义:
多个对象都具备相同的功能,但是功能具体内容有所不同,那么在抽取过程中,只抽取了功能定义,并未抽取功能主体,那么只有功能声明,没有功能主体的方法称为抽象方法。
例如:狼和狗都有吼叫的方法,可是吼叫内容是不一样的。所以抽象出来的犬科虽然有吼叫功能,但是并不明确吼叫的细节。
格式:
抽象类与抽象方法均需要使用abstract关键字。
抽象方法格式:
修饰符 abstract 返回值类型 函数名(参数列表) ;
抽象类格式:
修饰符 abstract class 类名{}
特点:
抽象类本身无法实例化。
抽象类通过多态的形式创建其子类实例对象。
子类需要将抽象父类的抽象方法均覆盖才可以实例化,否则依然是抽象类。
抽象类强制子类必须实现抽象方法。
注意事项
抽象类包含构造方法,用来给属性赋值供子类实例对象使用。
abstract不能与如下关键字公用
final :抽象类需要继承,final修饰的无法继承
static :抽象类抽象方法无方法体,调用无意义
private:抽象类的方法需要被覆盖,如果private修饰的话,子类无法访问
概念:比抽象类更为抽象的表现形式
格式:
定义接口:interface XX {}
使用接口:class YY implements XX{}
特点
接口是对外暴露的规则。
接口是程序的功能扩展。
接口的出现降低耦合性。
java支持类同时实现多个接口。
java支持类在继承一个类的同时,实现多个接口。
接口与接口之间可以有继承关系。并且可以多继承。
接口不能被实例化。
接口是”like a”的关系。
接口成员特点:
接口内的成员修饰符是固定的
成员常量:public static final,接口中只有常量
成员函数:public abstract,接口中只有抽象方法
构造方法:无
接口与抽象类的异同
均为抽取出的相同概念的抽象。都不能创建实例对象。
类为单继承,接口为多实现。
继承为”is a”的关系,接口为“like a”的关系。
抽象类中可以定义非抽象方法,共子类直接使用。接口均为抽象方法,因为固定修饰符。
|
|