Java中的继承

1.继承的概念

继承是多态的前提,没有继承就没有多态,继承主要要解决的问题就是共性抽取。父类也可以叫基类、超类;子类又叫派生类。子类可以拥有父类的内容,子类还可以拥有自己专有的内容。子类就是一个父类,子类可以被当做父类来看待,是is-a的关系。

2.继承的格式

public class 子类 extends 父类{
}

3.成员变量重名

  • 直接通过子类对象访问成员变量:看调用成员变量的对象等号左边是谁,是谁就优先用谁的成员变量,没有则向上找,到处都没有,则编译报错。
  • 间接通过子类的成员方法访问成员变量:该方法属于谁优先用谁,没有则向上找。

4.子类方法中变量重名

  • 局部变量:直接写成员变量名
  • 本类成员变量:this.成员方法名
  • 父类成员变量:super.成员方法名

5.成员方法重名

创建的对象是谁,就优先用谁,如果没有则向上找。

无论是成员变量还是成员方法,如果没有都是向上找父类,绝对不会向下找子类。

6.重写

  • 重写(Override):在继承关系中,方法的名称一样,参数列表也一样。又叫覆盖、复写。
  • 重载(Overload):方法的名称一样,参数列表不一样。
  • 方法的覆盖重写特点:创建的是子类对象,则优先调用子类方法。
  • 注意事项:
  1. @Override:是一种可选的安全检测手段,写在方法的前边,用来检测是不是有效的覆盖重写。@意为Annotation注解,不是注释。没有@Override也能是重写,推荐写注解。
  2. 重写时子类方法的返回值必须小于等于父类方法的返回值范围。java.lang.Object类是所有类的公共最高父类(祖宗类)。
  3. 重写时子类方法的权限必须大于等于父类方法的权限修饰符。public>protected>(default)>private。
  4. 绝大多数情况下,重写时子类和父类的返回值与权限一致。
  • 设计原则:对于已经投入使用的类,尽量不要修改,推荐定义一个新的类,来重复利用其中的共性内容,并且添加改动新内容。

7.继承关系中的构造方法

  • 子类构造方法中有一个默认隐藏的super()调用,定义一个子类对象,一定是先调用无参父类构造方法,再调用子类构造方法。
  • 子类构造可以通过super关键字来调用父类重载构造方法。
  • super()的父类构造方法调用必须是子类构造方法的第一个语句,不能一个子类构造调用多次super()父类构造。
  • 只有子类构造方法才能调用父类构造方法,其他子类方法不能调用。
  • 总结:子类必须调用父类构造方法,不写默认赠送一个父类无参构造(super()),写了则用子类构造指定的super调用,子类构造方法中super只能有一个,还只能是子类构造方法的第一个语句。

8.super关键字用法

  • 在子类成员方法中,访问父类的成员变量。
  • 在子类成员方法中,访问父类的成员方法。
  • 在子类构造方法中,访问父类的构造方法。

9.this关键字

  • this 关键字用来访问本类内容
  • 用法:
  1. 在本类成员方法中,访问本类成员变量。
  2. 在本类成员方法中,访问本类的另一个成员方法。
  3. 在本类构造方法中,访问本类的另一个构造方法this(...)。注意:this()必须是构造方法的第一个语句,唯一一个;super()和this()两种构造调用,不能同时使用。

Java中的继承_第1张图片

10.继承的特点

  • java支持单继承,即一个类的直接父类只能有一个。
  • java支持多级继承。
  • 一个子类只能有一个直接父类,但是一个父类可以有多个子类,即一个子类可以有多个兄弟姐妹。

你可能感兴趣的:(java,java,多态)