为什么我的代码能够编译,但是第i部分和第ii部分有运行时错误,而第3部分是可以的

时间:2016-04-18 14:25:31

标签: java

我有7个继承关系的类。

public class ClassA {

    public ClassA() {
    }

    public void printer(int x, String y)
    {
        System.out.println("Class A");
    }

}

public class ClassB extends ClassA{

    public ClassB() {
    }

    public void printer(int x)
    {
        System.out.println("Class B");
    }

}

public  class ClassC  extends ClassA{

    public ClassC() {
    }

    public void printer(String x, String y)
    {
        System.out.println("Class C");
    }

}

public class ClassD  extends ClassC{

    public ClassD() {
    }
       public void printer(String a, String b)
    {
        System.out.println("Class D");
    }

}

public class ClassE extends ClassC{

    public ClassE() {
    }

    public void printer(String x)
    {
        System.out.println("Class E");
    }

}

public class ClassF extends ClassE{

    public ClassF() {
    }

       public void printer(int x)
    {
        System.out.println("Class F");
    }
}

public class ClassG  extends ClassE{

    public ClassG() {
    }

           public void printer(String x)
    {
        System.out.println("Class G");
    }

}

我可以问为什么以下代码能够编译,为什么i和ii存在运行时错误,但iii是可以的。我很抱歉,如果这是一个简单的问题,但我已经在这个问题上开了几个小时。谢谢!

// part i
ClassA a = new ClassC();
ClassG g = (ClassG)a;
g.printer("hello");

// part ii 
ClassA a = new ClassC();
ClassG g = (ClassG)a;
g.printer("hello", "there");

// part iii
ClassA a = new ClassF();;
ClassC f = (ClassC)a;
f.printer(88,"there");

编辑: 对于第i部分和第ii部分,错误是: 线程“main”中的异常java.lang.ClassCastException:ClassC无法强制转换为ClassG。我的问题是关于多态,向上转换和向下转换。我需要帮助来理解它。谢谢!

1 个答案:

答案 0 :(得分:0)

请记住,继承定义了父类和子类之间的 is-a 关系。如果子类具有到父类的直接链接,则它将在子类上进行。

在这种情况下,它不起作用。由于继承,lib1_test1 ClassG,但无法保证ClassC 是-a { {1}}。