Java读书笔记——07 面向对象 继承

来源:互联网 发布:网络宣传要会什么 编辑:程序博客网 时间:2024/06/05 15:20

继承:复用已有类的方法可域,构建新类。还可以添加新的方法和域,满足新的需求。Java不支持多继承(一个儿子只能有一个父亲)

类、超类、子类

已存在的类:超类,基类,父类
新生的类:子类,派生类
super:指示编译器调用父类方法的特定关键字。不是对象的引用,不能赋给另一个对象变量。

public Manager(String n, double s, int year, int month, int day){    //调用超类中含有n,s,year,month,day参数的构造方法    super(n, s, year, month, day);}


多态(继承,重写,父类引用指向子类对象)

一个引用具体指向哪个类的实例对象是不确定的,在程序运行时才能知道,因为程序运行时才确定具体的类。通过一个父类可以引用多个子类就是多态。
父类的引用指向了子类对象。
父类不可以引用子类的方法,但如果子类重写了父类的方法,则父类调用方法时显示的是子类的内容。

//class Manager extends EmployeeManager boss = new Manager(...);Employee[] staff = new Employee[3];staff[0] = boss;//此时二者引用同一对象,但编译器将staff[0]看作employee类的对象//多态的表现Employee e ;e = new Employee(...);e = new Manager(...);//两种都不会出错


动态绑定

调用对象方法过程:
①查看对象声明类型和方法名,列举所有此类中名字相同的方法和超类中所有public并且名字相同的方法。
②查看方法参数类型,完全匹配就选择(重载解析)。
③public才需要动态绑定,private,static,final方法编译器都可以准确知道如何调用。
无需修改代码就可以扩展程序,会自动调用。子类方法不能低于父类方法的可见性。

final关键字

类不允许被继承,方法不允许被重写。

强制类型转换

子类变量引用赋给父类允许,父类赋给子类需要转换类型。转换类型前用instanceof检查。
instanceof:通过返回一个布尔值来指出,这个对象是否是这个特定类或者是它的子类的一个实例。
result = object instanceof class
result:布尔类型。
object:对象名。
class:类名。

//a(父类对象引用)赋给b(子类对象引用),先判断a是不是属于父类Cif(a instance of C){    b = (C) a;}

抽象类

祖先类:派生其他类的基类。
· 虽然可以定义,但里面方法具体怎么实现需要由子类决定。比如Person类有Employee和Student两个子类,还有getDescription()方法,但两个子类的描述互不相同,person类无法定义,该方法需要在子类中分别实现。所以写成抽象的——加abstract关键字。
· 有abstract方法的类一定是abstract类。
· 抽象类不能创建对象,不过可以引用子类非抽象类的对象。
· 抽象类的子类实现父类的全部抽象方法,则不是抽象类;如果没有完全实现,就是抽象类。

protect关键字:受保护访问

当希望父类域或方法被子类访问时,用protected声明它们。但子类方法只能访问子类对象中的域,而不能访问其他父类对象中的这个域。比如Manager类中方法只能访问m中的域,不能访问Employee类中其他对象的该域——子类只能访问受保护域。
谨慎使用,可能破坏封装性。

几种关键字 小结
这里写图片描述