教材学习内容总结
1.
继承是一种由己有的类创建新类的机制
子类只能有一个父类
2.
通过使用关键字extends来定义一个类的子类
Object是所有类的祖先类。
任何类都是Object类的子孙类,每个类(除了Object类)有且仅有一个父类,一个类可以有多个或零个子类。
如果一个类(除了Object类)的声明中没有使用extends关键字,这个类被系统默认为是Object的子类。
3.
如果子类和父类在同一个包中,那么,子类自然地继承了其父类中不是private的成员变量作为自己的成员变量,并且也自然地继承了父类中不是private的方法作为自己的方法,继承的成员变量或方法的访问权限保持不变。
当子类和父类不在同一个包中时,父类中的private和友好访问权限的成员变量不会被子类继承。
4.
当用子类的构造方法创建一个子类的对象时,不仅子类中声明的成员变量被分配了内存,而且父类的成员变量也都分配了内存空间,但只将其中一部分,即子类继承的那部分成员变量,作为分配给子类对象的变量。
子类中还有一部分方法是从父类继承的,这部分方法却可以操作这部分未继承的变量,
5.
对象 instanceof 类 instanceof运算的结果是true,否则是false
6.
所声明的成员变量的名字和父类继承来的成员变量的名字相同(声明的类型可以不同),在这种情况下,子类就会隐藏所继承的成员变量。
子类隐藏继承的成员变量的特点如下:
子类对象以及子类自己定义的方法操作与父类同名的成员变量是指子类重新声明的这个成员变量。
子类对象仍然可以调用从父类继承的方法操作被子类隐藏的成员变量,也就是说,子类继承的方法所操作的成员变量一定是被子类继承或隐藏的成员变量。
7.
子类通过重写可以隐藏已继承的方法(方法重写称为方法覆盖)
所谓方法重写,是指子类中定义一个方法,这个方法的类型和父类的方法的类型一致或者是父类的方法的类型的子类型(所谓子类型,是指如果父类的方法的类型是“类”,那么允许子类的重写方法的类型是“子类”)
子类通过方法的重写可以隐藏继承的方法,子类通过方法的重写可以把父类的状态和行为改变为自身的状态和行为
重写方法既可以操作继承的成员变量、调用继承的方法,也可以操作子类新声明的成员变量、调用新定义的其他方法,但无法操作被子类隐藏的成员变量和方法。
重写方法的类型可以是父类方法类型的子类型,即不必完全一致。
重写父类的方法时,不允许降低方法的访问权限,但可以提高访问权限(访问限制修饰符按访问权限从高到低的排列顺序是public、protected、友好的、private)。
8.
如果在子类中想使用被子类隐藏的成员变量或方法,就需要使用关键字super。
如果子类的构造方法没有明显地指明使用父类的哪个构造方法,子类就调用父类的不带参数的构造方法。
当在父类中定义多个构造方法时,应当包括一个不带参数的构造方法,以防子类省略super时出现错误。
9.
final关键字可以修饰类、成员变量和方法中的局部变量。
final类不能被继承,即不能有子类。
如果用final修饰父类中的一个方法,那么这个方法不允许子类重写,也就是说,不允许子类隐藏可以继承的final方法。
如果成员变量或局部变量被修饰为final,那它就是常量。
常量在声明时没有默认值。
10.
对象的上转型对象的实体是子类负责创建的,但上转型对象会失去原对象的一些属性和功能。
上转型对象具有如下特点:
(1)上转型对象不能操作子类新增的成员变量(失掉了这部分属性),不能调用子类新增的方法(失掉了一些行为)
(2)上转型对象可以访问子类继承或隐藏的成员变量,也可以调用子类继承的方法或子类重写的实例方法
不可以将父类创建的对象的引用赋值给子类声明的对象
如果子类重写了父类的静态方法,那么子类对象的上转型对象不能调用子类重写的静态方法,只能调用父类得静态方法。
11.
多态性就是指父类的某个方法被其子类重写时,可以各自产生自己的功能行为。
12.
对于abstract方法,只允许声明,不允许实现(没有方法体),而且不允许使用final和abstract同时修饰一个方法或类,也不允许使用static修饰abstract方法,即abstract方法必须是实例方法。
abstract类中可以有abstract方法(非abstract类中不可以有abstract方法),也可以有非abstract方法。
对于abstract类,我们不能使用new运算符创建该类的对象。
如果一个非abstract类是abstract类的子类,它必须重写父类的abstract方法,即去掉abstract方法的abstract修饰,并给出方法体。如果一个abstract类是abstract类的子类,它可以重写父类的abstract方法,也可以继承父类的abstract方法。
抽象类可以抽象出重要的行为标准,该行为标准抽象方法来表示。
抽象类声明的对象可以成为其子类的对象的上转型对象,调用子类重写的方法。
13.
所谓面向抽象编程,是指当设计某种重要的类时,不让该类面向具体的类,而是面向抽象类,即所设计类中的重要数据是抽象类声明的对象,而不是具体类声明的对象。
面向抽象编程的目的是为了应对用户需求的变化,将某个类中经常因需求变化而需要改动的代码从该类中分离出去。
面向抽象编程的核心是让类中每种可能的变化对应地交给抽象类的一个子类去负责,从而让该类的设计者不去关心具体实现,避免所设计的类依赖于具体的实现
14.
所谓“开-闭原则”,就是让设计的系统对扩展开放,对修改关闭。
教材学习中的问题和解决过程
参考资料
《java 2实用教程(第5版)》