在Java中,我们可以将超类对象传递给子类引用吗?
我知道这是一个奇怪的问题/实际上不可行,但是我想了解这个背后的逻辑为什么在Java中不允许这样做。
class Employee {
public void met1(){
System.out.println("met1");
}
}
class SalesPerson extends Employee
{
@Override
public void met1(){
System.out.println("new met1");
}
public void met2(){
System.out.println("met2");
}
}
public class ReferenceTest {
public static void main(String[] args) {
SalesPerson sales = new Employee(); // line 1
sales.met1(); // line 2
sales.met2(); // line 3
}
}
如果Java允许编译第1行会发生什么?问题将在哪里出现?
欢迎任何输入/链接。
如果您的SalesPerson sales = new Employee();
语句被允许编译,那么这将破坏多态性的原理,这是该语言具有的功能之一。
另外,您应该熟悉编译时间类型和运行时类型的含义:
变量的编译时类型是声明为的类型,而运行时类型是变量指向的实际对象的类型。例如:
Employee sales = new SalesPerson();
的编译时类型sales
为Employee
,运行时类型为SalesPerson
。编译时类型定义可以调用的方法,而运行时类型定义实际调用期间发生的事情。
让我们暂时假设此语句是有效的:
SalesPerson sales = new Employee();
如我所说,编译时类型定义了可以调用的方法,因此met2()
可以进行调用。同时,Employee
该类没有met2()
,因此实际的调用将是不可能的。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句