Java 为什么我的代码可以编译,但是第一部分和第二部分有运行时错误,而第三部分没有问题
我有7个具有继承关系的类Java 为什么我的代码可以编译,但是第一部分和第二部分有运行时错误,而第三部分没有问题,java,Java,我有7个具有继承关系的类 public class ClassA { public ClassA() { } public void printer(int x, String y) { System.out.println("Class A"); } } 我想问一下,为什么下面的代码能够编译,为什么I和ii会出现运行时错误,而iii是可以的。如果这是一个简单的问题,我很抱歉,但我已经为此绞尽脑汁好几个小时了。谢谢 //
public class ClassA {
public ClassA() {
}
public void printer(int x, String y)
{
System.out.println("Class A");
}
}
我想问一下,为什么下面的代码能够编译,为什么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");
编辑:
对于第一部分和第二部分,错误为:
线程“main”java.lang.ClassCastException中出现异常:无法将ClassC转换为ClassG。我的问题是关于多态性、向上投射和向下投射。我需要帮助来理解它。谢谢 请记住,继承定义了父类和子类之间的is-a关系。如果子类与父类有直接链接,则可以对其进行强制转换
在这种情况下,它不起作用
ClassG
是-aClassC
因为继承,但是不能保证aClassC
是-aClassG
那么,有什么错误???对不起,我已经把它作为代码了。没有错误,我想知道为什么我的代码能够编译,但是第一部分和第二部分有运行时错误,而第三部分是好的?我的问题是关于多态性、向上投射和向下投射。我需要帮助来理解它。运行时错误就是一个错误。如果你想问为什么会出现错误,你应该在你的问题中包括你遇到的错误(完整的堆栈跟踪)。ClassG
不是ClassC
的父类,所以你不能将ClassC
实例转换成ClassG
实例。我可以问一下为什么它一开始就编译了吗?
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");
}
}
// 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");