【JavaSE】面向对象之super、final

一、super关键字

它是一个指代变量,用于在子类中指代父类对象。

1.作用

  1. 指代父类对象
  2. 区分子父类同名的成员变量,区分父类中成员变量和子类中同名的局部变量

2.使用

  1. 与this相同,调用父类成员变量和成员方法:super.xx super.xxx()
    调用父类构造器 super(xxx)
    如果子类没有显示调用父类构造器,系统会默认在子类构造器首行调用父类空构造器
super.属性名//访问父类的属性

super.方法名(参数);//调用父类的方法。

super(参数);//调用父类的构造方法。
//初始化当前对象的父类型特征
  1. super能出现在实例方法和构造方法中,不能使用在静态方法中。且大部分情况下可以省略。

  2. super()只能出现在构造方法第一行,通过当前的构造方法去调用、"父类"中其它的构造方法,目的是:代码复用(创建子类对象的时候,先初始化父类型特征)。

    • 建议手动写无参构造方法
      1. 一个类如果没有手动提供任何构造方法,系统会默认提供一个无参数构造方法。
      2. 一个类如果手动提供了一个构造方法,那么无参数构造系统将不再提供。
      3. 重要的结论:
        当一个构造方法第一行既没有this()又没有super()的话,默认会有一个super();表示通过当前子类的构造方法调用父类的无参数构造方法。所以必须保证父类的无参数构造方法是存在的。

注意:this ()和super()不能共存,它们都是只能出现在构造方法第一行。

public  class SuperTest {
    public  int num = 20;

    public SuperTest() {
    }

    public SuperTest(int num) {
        this.num = num;
    }

    public  void test(){
        System.out.println(num);
    }
}

class superSon extends SuperTest{
    private int num3 = 20;
    public superSon() {
        super();
    }

    public superSon(int num) {
        this();//解决 this()和super()不能共存问题
        
    }
    
}

二、final关键字

表示最终的,不可被修改的。

1.被final修饰的变量为常量(标识符规范)

可以修饰局部变量也可以修饰成员变量

public class FinalTest {
    private final int num = 50;
    
    public void test(){
        final int num2 = 20;
    }
}
image.png

由图可见,在为被final修饰的变量重新赋值时,会报编译错误。

2.被final修饰后的方法不能被重写

public class FinalTest {
    public final void test(){
        int num2 = 20;
    }
}

class FinalSon extends FinalTest{
    //报编译异常,此重写不可行
    /*public void test(){ 

    }*/
}
image.png

3.被final修饰的类不能被重写

public final class FinalTest {
    public  void test(){
        int num2 = 20;
    }
}

class FinalSon extends FinalTest{

}
image.png

由此可见,被final修饰的类,不可被继承,所以也称这种被final修饰的类为“太监类”(没儿子 /狗头)。

你可能感兴趣的:(【JavaSE】面向对象之super、final)