一、小结
本章主要讲解了Java语言面向对象的特性,包括继承简介、子类的继承、多态、抽象类、final修饰符、内部类。通过本章的学习,读者应该熟练掌握Java语言中继承和多态的操作;重点理解super关键字和final修饰符。另外,需要掌握抽象类和抽象方法的规则,通过程序更好理解抽象类的使用。
二、测验
抽象方法只有函数声明,没有函数体。
super关键字:子类和父类成员变量或成员方法同名时调用
三、习题
1、 创建如下类:Circle类(圆形)、Square类(正方形)和Point类(点)。Point根据(x,y)坐标定位。Circle除了一个(x,y)坐标点之外,还有半径属性。正方形除了一个(x,y)坐标点之外,还有边长。请问:这些类中哪些是超类,哪些是子类?
Java中的超类就是父类
Point类是超类,Circle类和Square类是子类。
2、关键字组合问题。
(1)abstract方法能否是final类型的? 不行
abstract修饰的类需要被子类继承,abstract修饰的方法需要子类重写,但是final修饰的类不能被继承,final修饰的方法也不能被子类重写。
(2)abstract方法能否是static类型的? 不行
因为静态方法是属于类的,所以静态方法必须满足给类调用,如果通过类无法调用,那么这种静态方法肯定是不对的。为了达到这一要求,static方法就必须有方法体,即已经实现了,也就不是抽象方法了。
另:抽象方法也不能被private修饰:因为abstract修饰的方法必须通过子类重写才有效,而private修饰的方法对子类不可见,即父类中如果存在private abstract void out();而子类中有private void out(){},则它们是两个不同的方法,子类中的out方法不是对父类的重写,而是属于子类独有的方法。
(3)能否定义一个私有静态(private static)方法? 不行
private:在学习继承的过程中,我们知道,如果在父类中修饰了一个private的方法,子类继承之后,对子类也是不可见的。子类重写则在编译阶段就会报错。
static:Java中static方法不能被覆盖,因为方法覆盖是基于运行时动态绑定的,而static方法是编译时静态绑定的。static方法类的任何实例都不相关,所以概念上不适用。
5-3 简单说明方法重载与方法覆盖的区别。
方法的重载是指在一个类中,出现多个方法名相同,但参数个数或参数类型不同的方法。方法覆盖体现了子类补充或者改变父类方法的能力,通过覆盖,可以使一个方法在不同的子类中表现出不同的行为。
5-4 列举出面向对象的三大特性。
封装、继承、多态