美文网首页
Java 父类与子类同名的成员变量

Java 父类与子类同名的成员变量

作者: 一方乌鸦 | 来源:发表于2018-05-24 23:25 被阅读268次

    先看个例子:

    public class Test {
        public static void main(String[] args) {
            B b = new B();
            b.b();
        }
    }
    class A {
        String a = "a";
        A () {
            System.out.println("a this.a: " + this.a);
        }
        void visit() {
            System.out.println("this.getClass(): " + this.getClass());
        }
    }
    class B extends A {
        String a = "b";
        B() {
            System.out.println("b super.a: " + super.a);
            System.out.println("b this.a: " + this.a);
            System.out.println("super.equal(this): " + super.equals(this));
        }
        void b() {
            visit();
        }
    }
    
    

    打印的结果是:

    a this.a: a
    b super.a: a
    b this.a: b
    super.equal(this): true
    this.getClass(): class B
    

    结论:

    1. 成员变量不具有多态,子类与父类的相同描述的成员变量分开存储,互不干扰,也没有覆盖。如在父类中的 a 和子类中的 a ,即同一个对象的不同存储空间。
    2. 在调用父类构造器的时候,没有创建父类对象,只执行了一次 new 指令,用来创建子类对象。super这个关键字只不过是访问了这个空间特定部分的数据(也就是专门存储父类数据的内存部分)。

    相关文章

      网友评论

          本文标题:Java 父类与子类同名的成员变量

          本文链接:https://www.haomeiwen.com/subject/yfuejftx.html