一、继承概念

在现实生活中我们常听到继承我的花呗,继承遗产等等。

在Java中就是一个类继承另一个类,然后就拥有了那个类的成员变量和成员方法。

继承类被叫为子类(也叫派生类),被继承的类就叫父类(也叫基类,超类)。

继承最大的作用就是实现对代码的复用。

二、定义格式

使用关键字extends来实现,在定义子类时加上子类 extends 父类Java中每一个类只能有继承一个父类。

在Java中最多不希望超过3层继承。

例如,Dog类继承Animal类定义如下:

class Animal{
	
}
class Dog extends Animal{

}

三、父类成员的访问

当子类成员和父类成员出现同名的情况的时候,会默认访问子类成员。

例如在下面代码中在子类中设置名字时设置的是子类中的name。

class Animal{
	String name;
}
class Dog extends Animal{
    String name;
    public void setNam(String na){
          name = na;
    }
}

3.1 成员(包括成员变量和成员方法)访问规则

访问规则有如下3条:

  1. 如果访问的成员变量子类中有,优先访问自己的成员变量。
  2. 如果访问的成员子类中无,则访问父类中继承下来的,如果父类中也没有,则编译报错。
  3. 如果访问的成员与父类的成员同名,则优先访问自己的。

注意要考虑访问修饰限定符的修饰。

3.2 super关键字

那想访问父类的成员要如何做呢? 就需要使用关键字super,如上述代码进行下列修改就是访问的父类的name。

class Animal{
	String name;
}
class Dog extends Animal{
    String name;
    public void setNam(String na){
          super.name = na;
    }
}

3.3 super使用规则

使用规则有如下四条:

  1. super.变量名;访问父类重名成员变量。
  2. super.方法名();访问父类重名成员方法。
  3. super();访问父类构造方法,必须在第一行。
  4. super只能访问直接父类。

3.3.1 访问父类构造方法注意事项

当父类中提供了构造方法,子类必须也提供相同参数的构造方法。

当我们父类提供了,子类没提供就会报错。(先要帮父类成员变量初始化,我称为“尽孝“”)

111

因为super调用父类构造函数和this调用构造函数都必须要在第一行,所以不能同时出现。

四、代码执行顺序

静态只执行一次,父类优先子类执行。

执行顺序如下:

  1. 父类的静态代码块。
  2. 子类的静态代码块。
  3. 父类的构造代码块。
  4. 父类的构造方法。
  5. 子类的构造代码块。
  6. 子类的构造方法。

五、final关键字

final和c语言中const类似。

在Java中最多不希望超过3层继承。那我们要想该类不能再被继承,就可以用final来修饰该类。

final修饰类

final修饰放在访问修饰限定符前面后面都可以

public final class Animal{ } final public class Animal{ } final修饰注意事项:

  • final修饰成员变量将其改为常量,不能修改。
  • final修饰引用数据,引用指向的地址不能变,但对象值可变。如:
  • 【JavaSE】面向对象三特性之一,继承_成员变量

  • final修饰类,表示该类不能被继承。
  • final修饰方法,表示该方法不能被重写。