转换对象和继承

时间:2017-11-29 02:24:01

标签: java object inheritance methods casting

我有这两个类,我想知道输出为ABB.xxx的原因。有人可以解释为什么它不是A.xxx当它被铸造?

这是我的两个班级和主要方法:

public abstract class A {
    public A() {
        System.out.println("A");
    }

    public void xxx() {
        System.out.println("A.xxx");
    }

    abstract void yyy();
}

public class B extends A {
    public B() {
        System.out.println("B");
    }

    public void xxx() {
        System.out.println("B.xxx");
    }

    public void yyy() {
        System.out.println("B.yyy");
    }
}

public class ClassRunner {
    public static void main(String[] args) {
        B b2 = new B();
        ((A)b2) .xxx();    
    }
}

1 个答案:

答案 0 :(得分:0)

所以当你有继承......表单的变量初始化

A my_A = new B()

其中B延伸A ...称为伪装。您将B的实例伪装成A的对象。经验法则是等号左侧的类(A)定义了允许在对象上调用的方法。由于A类具有“.xxx()”方法,因此我们可以使用它。另一方面,等号右侧的类定义了我们使用的.xxx()方法的实际版本。由于B类在右侧,我们使用B的.xxx()版本。如果B没有.xxx(),则默认使用A的版本。