继承、super与this的区别

继承

  说到继承就想到了我们常说的子承父业,java中的继承(extends)也就是运用了这种思想,这样可以减少代码的重复率以及方便维护。

在这里插入图片描述

super与this的区别

super this
父类对象的引用 本类对象的引用
super.成员变量(或成员方法)

调用父类成员变量(或成员方法)

this.成员变量(或成员方法)

调用本类成员变量(或成员方法)

super(...)

调用父类构造方法

this(...)

调用本类构造方法

final、private关键字

final private
被修饰的类不能被继承 被修饰的方法不能被继承
被修饰的方法不能被继承
被修饰的变量赋值完后,不能被重新赋值 被修饰的变量不能被继承

代码演示

父类
public class Extend{
    public Extend() {
        System.out.println("我是父类构造方法");
    }
    public void show(){
        System.out.println("我是父类show方法");
    }
    final int i=100;
    String x="我是父类常量";
    private String p="我是父类私有变量";
    private void my(){
        System.out.println("我是父类私有方法");
    }
}

子类

public class Extend2 extends Extend{
    public Extend2() {
       // super();系统隐藏的,你也可以写出来,这就是为什么父类构造函数会先执行的原因
        System.out.println("我是子类构造方法");
    }
    @Override
    public void show() {
        System.out.println("我是子类重写的show方法");
    }
}

测试类

public class Text {
    public static void main(String[] args) {
        Extend2 e=new Extend2();//创建Extend对象e
        System.out.println(e.x);
        System.out.println(e.i);
       // System.out.println(e.p);这句话会出错
        e.show();
      //  e.my();这句话会出错
    }
}

结果

我是父类构造方法
我是子类构造方法
我是父类常量
100
我是子类重写的show方法

  通过结果可以看出实例化子类时,回会先对父类构造函数进行实例化,其次是子类构造函数,重写过后的函数,结果也会是重写的内容,常量也被继承下来了,但是私有方法变量却不能被调用。

猜你喜欢

转载自blog.csdn.net/grey_mouse/article/details/83305343