1.对象的上转型对象
假如A类是B类的父类,当用子类创建一个对象,并把对象的引用放到父类的对象中。
如:
A a=new B();
或
A a;
B b=new B();
a=b;
称a是b的上转型对象
有如下特点:
(1)上转型对象不能操作子类新增的成员变量,不能调用子类新增的方法。
(2)上转型对象可以访问子类继承或隐藏的成员变量,也可调用子类继承的方法或子类重写的方法。
上转型对象操作子类继承的方法或子类重写的方法,其作用等价于用子类对象去调用这些方法。
注意:(1)父类创建的对象不等同于子类对象的上转型对象。
(2)若将对象的上转型对象强制转换到一个子类对象,这时,子类对象又具备了子类所有的属性和功能。
(3)不可以将父类创建的对象的引用赋给子类声明的对象。
2.abstract类(抽象类)特点
抽象类只关心操作,即关心方法的名字、类型、参数,不关心这些操作具体实现的细节,即不关心方法体。
(1)abstract类中可以有abstract方法。也可以有普通方法。
(2)abstract类不可以用new运算符创建对象。
注意:
(1)abstract类也可以没有abstract方法。
(2)如果一个abstract类是abstract类的子类,它可以重写父类的abstract方法,也可以继承这个abstract方法。
3.接口的特点
接口只关心操作,并不关心操作的具体实现。
(1)接口中只有抽象方法,没有普通方法,只有常量,没有变量。且所有常量和方法的访问权限一定是public。
(2)如果一个类实现了某个接口,那么这个类必须重写该接口的所有方法。注意的是,接口中的方法一定是public abstract方法,所以
类在重写接口方法时不仅要去掉abstract修饰给出的方法体,而且方法的访问权限一定要明显的用public来修饰(否则就降低了访问权限,这是不允许的)。
(3)public接口可以被任何一个类声明实现,若接口不加public就称为友好接口,友好接口可以被与该接口在同一包中的类声明实现。
注意:
(1)若父类实现了某个接口,那么子类也就实现了该接口,子类不必再显式的使用关键字implements声明实现这个接口。
(2)接口也可以被继承,即通过extends声明一个接口是另一个接口的子接口。由于接口中的方法和常量都是public,子接口将继承父接口中的所有方法和常量。
总结自 《Java面向对象程序设计》第二版 耿祥义 张月平 编著
第五章 继承与接口