我有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。我的问题是关于多态,向上转换和向下转换。我需要帮助来理解它。谢谢!
答案 0 :(得分:0)
请记住,继承定义了父类和子类之间的 is-a 关系。如果子类具有到父类的直接链接,则它将在子类上进行。
在这种情况下,它不起作用。由于继承,lib1_test1
是 ClassG
,但无法保证ClassC
是-a { {1}}。