这是在以下java代码中实现向上转换和向下转换的正确方法吗?

时间:2016-08-31 10:52:27

标签: java nested downcast

package test;
public class Test {

     public static void main(String[] args) {
        A a2 = new B();               // 1
        a2.display1(); 
        a2.display();
        ((B) a2).display2();          //  2
        ((A) a2).display();           //  3
        B b1 = new B();
        b1.display1();                //  4
     }
}
class A {
    int a = 10;

    void display() {
        System.out.println("parent class " + a);
    }

    void display1() {
        System.out.println("parent class " + (a + 10));
    }
}
class B extends A {
    int a = 30;

    @Override
    void display() {  
        System.out.println("child class " + a);
    }

    void display2() {
        System.out.println("child class " + (a + 10));
    }
}
  1. 其对象是否已创建?A类或B类。
  2. 这是向下倾斜吗
  3. 为什么这不是调用A类的方法?如何使用此对象调用类A的方法(覆盖一个),而不是使用A的对象。
  4. 这是隐含的向上翻译吗?
  5. 如果A类具有嵌套的B类,则在A类的对象创建期间 是否也形成了b类的对象?我无法使用来自A的对象的B类方法

1 个答案:

答案 0 :(得分:1)

  1. 您执行new B(),因此显然会创建B个对象。

  2. 是的,从类型A到类型层次结构下的子类型B

  3. 因为a2引用了一个B对象,并且通过查看实际对象的类型是动态确定的(在运行时而不是在编译时)

  4. 不,这里根本没有施法。

  5. 我不明白你的意思。变量的类型决定了您可以调用哪些方法,但实际调用哪个方法取决于变量引用的对象的实际类型。