第三章 多态
3.2 什么是多态
简单来说,多态(polymorphism)是具有表现多种形态的能力的特征。更专业化的说法:同一个实现接口,使用得到实例而执行不同的操作。
3.2.1 子类到父类的转换(向上转型)
将int型常量或变量的值赋给double型变量,可以自动进行类型转换。
int i = 5;
double dl = 5;
将double型常量或变量的值赋给int型,进行强制类型转换。
double d2 = 3.14;
int a = (int) d2;
子类转换成父类的规则:
将一个父类的引用指向一个子类对象,称为向上转型(upcasting),自动进行类型转换。
通过父类引用变量调用的方法是子类覆盖或继承父类的方法,不是父类的方法。
通过父类引用变量无法调用子类特有的方法。
3.2.4 父类到子类的转换(向下转型)
将一个指向子类对象的父类引用赋给一个子类的引用,称为向下转型,此时必须进行强制类型转换。
3.2.5 instanceof运算符
instanceof的语法:
对象 instanceof类或接口
该运算符用来判断一个对象是否属于一个类或者实现了一个接口,结果为true或false。在强制类型转换类型之前通过instanceof运算符检查对象的真实类型,再进行相应的强制类型转换,这样就可以避免类型转换异常,从而提高代码的健壮性。
在进行引用类型转换时,先通过instanceof运算符进行判断,再进行相应的强制类型转换,这样可以有效地避免出现类型转换异常。
使用instanceof运算符时,对象的类型必须和instanceof的第二个参数所指定的类或接口在继承树上有上下级关系,否则会出现编译错误。
instanceof通常和强制类型转换结合使用。
通过多态可以减少类中的代码量,提高了代码扩展性和可维护性。继承是多态的基础,没有继承就没有多态。
使用父类作为方法形参和使用父类作为返回值类型是使用多态得到常用方式。
第四章 接口
4.1.2 什么是接口
在软件中,接口是一种规范标准,它们可以约束类的行为,是一些方法特征的集合,但是没有方法的实现。接口可以看作是一种特殊的“抽象类”,但是采用与抽象类完全不同的语法来表示,两者的设计理念是不同的,抽象类利于代码的重复性,接口利用代码的1扩展和维护。
Java中接口的定义语法和类实现接口的语法如下:
语法
【修饰符】interface接口名exteds父接口1,父接口2······{
//常量定义
//方法定义
}
语法
class类名extends父类名implements接口1,接口2,······{
//类成员
}
说明
(1)接口的命名规则与类相同。如果修饰符public,则该接口在整个项目中可见;如果省略修饰符,则该接口只在当前包可见。
(2)接口中可以定义常量,不能定义变量。接口中的属性都会自动用public static final修饰,即接口中的属性都是全局静态变量。接口中的常量必须在定义时指定初始值。
(3)接口中所有方法都是抽象方法。接口中方法都会自动用public abstract修饰,即接口中只有全局抽象方法。
(4)和抽象类一样,接口也不能实例化,接口中不能有构造方法。
(5)接口之间可以通过extebds实现继承关系,一个接口可以继承多个接口,但接口不能继承类。
(6)接口的实现类必须实现接口的全部方法,否则必须定义为抽象类。
一个类只能有一个直接父类,但可以通过implements实现多个接口。当类继承父类的同时又实现了多个接口时,extends关键字必须位于implements关键字之前。
第四章:接口
接口中的属性都是全局静态常量,接口中的方法都是全局抽象方法,接口中的方法都是全局抽象方法,接口中没有构造方法
和抽象类一样,接口也不能实例化,接口中不能有构造方法
接口之间可以通过extends实现继承关系,一个接口可以继承多个接口,但接口不能继承类
接口中所有方法都是抽象方法,接口中方法都会自动永public abstract修饰,即接口中只有全局抽象方法
类只能继承一个类,但可以是实现多个接口,一个类如果实现了一个接口,则必须实现接口中的全部方法,否则必须将其定义为抽象类,Java通过实现接口达到了多重继承的效果
接口表示一种约定,接口表示一种能力。接口体现了约定和实现相分离的原则
抽象类利于代码复用,接口利于代码维护
通过面向接口编程,可以降低代码间的耦合性,提高代码的可扩展性和可维护性
面向接口编程意味着:开发系统时,主体构架使用接口,接口构成系统的骨架,这样就可以通过更换实现接口的类来更换系统



