【Java】继承(类、超类、子类)

1、父类与子类

  • 一个简单规则用于判断是否应该将数据设计为继承关系,即“is-a”规则。
    如:每个经理都是员工。
  • 继承使用关键字extends
    1
    如上,Manager继承Employee。
  • 父类又称超类、基类。
  • 应该将最一般的方法放在超类中,而将更特殊的方法放在子类中。
  • 子类方法的访问权限不能低于父类方法,即父类是public,子类必须为public。

2、覆盖方法

  • 有时超类中的方法不能满足子类的要求,那么就在子类中提供一个同名的新方法覆盖(override)超类的方法。
  • 有时我们需要使用到超类中的私有字段,要调用超类中的公共接口去访问,要用到super关键字。
    2
    调用超类中的公共接口getSalary()去访问超类的私有字段salary。

3、子类构造器

3

  • 这里的super语句是调用超类对应的构造器的简写形式。
    由于子类的构造器不能访问超类的私有字段,所以必须通过一个构造起来初始化这些字段。
    可以利用这种特殊的super用法调用构造器,且这个语句必须在子类构造器的第一句
  • 若子类的构造器没有显式地调用超类的构造器,将自动地调用超类的无参数构造器。若超类没有无参数构造器,且子类中又没有显式调用超类的其他构造器,将会报错。

4、this和super

  • this的两个含义:1.指示隐式参数的引用;2.调用该类的其他构造器;
  • super的两个含义:1.调用超类的方法;2.调用超类的构造器;

5、多态

  • 一个对象变量可以指示多种实际类型的现象称为多态
  • 在运行时能够自动选择适当的方法,称为动态绑定
  • Java中,对象变量是多态的。即,一个超类的变量可以引用一个超类的对象,也可以引用其任何一个子类的对象。

6、方法调用的过程

  • 1.编译器查看对象的声明类型和方法名,找到候选方法。
  • 2.确定方法调用提供的参数,以匹配方法。
  • 3.若是private、static、final方法或者构造器,那么编译器可以准确知道调用哪个方法,这是静态绑定。但,调用的方法依赖于隐式参数的实际类型,就用到动态绑定
  • 4.采用动态绑定调用方法时,虚拟机必须调用与引用对象的实际类型对应的那个方法,比如:调用的子类的就找子类的对应方法。虚拟机预先会为每个类计算一个方法表,其中有所有方法的签名(方法的名字和参数列表)和要调用的实际方法。
  • 5.从方法表中找到定义了对应签名的类,并确定了方法,从而调用方法。

7、阻止继承:final类和方法

  • 不允许被扩展的类被称为final类,即不允许派生这个类。
  • final方法时不允许覆盖这个方法。
  • final类中的所有方法自动成为final方法。
  • 将方法或类声明为final的主要原因是:确保它们不会在子类中改变语义。

8、强制类型转换

  • 使用方法:一对括号将目标名括起来
    5
    6
  • 尽量少用强制转换。

9、抽象类

  • 关键字abstract
    使用抽象类是为提供更高层次的抽象,比如学生、老师、公司员工等都是人,都有姓名、年龄等属性。
  • 包含一个或多个抽象方法的类,必须被声明为抽象的。除了抽象方法外,抽象类可以包含具体的数据方法
    7
  • 建议:尽量将通用的字段和方法放在超类中。
  • 扩展抽象类有两种选择
    一种是保留部分或全部抽象方法未定义,这样子类也为抽象类;
    另一种是定义全部方法,这样子类就不是抽象的了。
  • 抽象类不能实例化。

10、受保护访问

  • 关键字protected
  • 有时,可能希望限制超类中的某个方法只允许子类访问,或允许子类的方法可访问超类的某个字段。
  • 谨慎使用保护字段,因为它违背了封装精神。
  • 受保护的方法更具有实际意义,表明子类得到了信任,可以使用超类方法。

11、四种访问控制符

  • private - 本类可见
  • public - 外部完全可见
  • protected - 本包和所有子类可见
  • 无修饰符,默认 - 本包可见

参考

《Java核心技术 卷Ⅰ》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Kaimar

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值