什么是Java运行时重写规则如下2种情况Java运行方法重载规则
方案1:
class A{
void display(Integer i){
sysout("In A Integer");
}
void display(Object obj){
sysout("In A Object");
}
}
class B extends A{
void display(int i){
sysout("In B int");
}
}
PSVM(){
A a=new B();
a.display(2); //In A Integer
a.display(new Integer(2)); //In A Integer
a.display("hello"); //In A Object
a.display(new Object()); //In A Object
a.display(null);
}
方案2:
class A {
void display(int i){
sysout("In A int");
}
}
class B extends A{
void display(Integer i){
sysout("In B Integer");
}
void display(Object obj){
sysout("In B Object");
}
}
PSVM(){
A a=new B();
a.display(2); //In A int
a.display(new Integer(2)); //In A int
a.display("hello"); // Compilation error
a.display(new Object()); //Compilation error
a.display(null); //Compilation error
}
我有几个疑问这里: 1.通用运行时覆盖方法评估如何发生:任何参考可用? 2.为什么在方案2中,a.display(新的Intger(2))不会引发编译错误?
2.你为什么认为它应该创建一个? – SomeJavaGuy
在这两种情况下,B对象都被分配给A引用。在这些场景中,哪些顺序运行时方法调用完成? – user3781572
提示:上传代码的时候,然后把实例一致;就像:其他人可以简单地将其复制/粘贴到他们的编辑器中进行播放。你的例子使用一些PSVM()构造函数调用;然后你正在使用“sysout”,这是一种不存在的方法。换句话说:你有一个具体的代码问题。然后粘贴真正的代码,而不是伪代码! – GhostCat