java 子类所覆盖的变量和方法区别

2019-04-22  本文已影响0人  南土酱

本文由个人自行总结,各位大神如有不同建议欢迎指出,也希望能给个关注


\color{red}{本次主题是总结一个关于子类覆盖小知识。是关于成员变量和方法的调用问题,话不多说,先看测试代码}

public class Test{
    public static void main(String[] args) {
        Car bmw = new BMW("宝马x5");
        System.out.println(bmw.name);
        bmw.prin();
        System.out.println(bmw.ffInteger);
        System.out.println( bmw.getClass());
    }
}

java console 打印结果: 我是父类构造无参 我是子类构造 汽车 子子 5 class exercise.BMW

class Car {
    String name = "汽车";
    Integer ffInteger = 5;
    Car(String name){
        name = this.name;
        System.out.println("我是父类构造");
    }
    public Car() {
        System.out.println("我是父类构造无参");
    }
    void prin() {
        System.out.println("爸爸");
    }
}

class BMW extends Car{
    String name = "宝马";
    Integer ffInteger =226;
    BMW(String name) {
        this.name = name;
        System.out.println("我是子类构造");
    }
    void prin() {
        System.out.println("子子");
    }
}

我们可以看到。对于成员变量 name 和方法 prin() 而言.通过 new BMW() 实例调用之后, 成员变量输出的 父类 Car 的值, 方法打印的却是子类 BMW 的值。并且父类只调用了无参的构造方法。不要错误的认为父类的有参构造方法也会被调用,除非你自己显式的调用了。
对于父类和子类有相同的成员变量和方法。 调用方法总是优先调用子类的方法,成员变量看谁对实例进行了引用,本例子是父类进行了引用: Car bmw ,so 调用的是父类的值

上一篇 下一篇

猜你喜欢

热点阅读