在Java中,我们可以将父类(super class)对象传递给子类引用吗?
我知道这是一个奇怪的问题/实际上不可行,
但我想了解其背后的逻辑
为什么在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();
语句进行编译,这将破坏Polymorphism的原理,这是该语言具有的功能之一。
另外,您应该熟悉编译时间类型和运行时类型的含义:
变量的编译时类型是声明为的类型,而运行时类型是变量指向的实际对象的类型。例如:
Employee sales = new SalesPerson();
sales
的编译时类型为Employee
,运行时类型为SalesPerson
。编译时类型定义可以调用的方法,而运行时类型定义实际调用期间发生的事情。
让我们暂时假设此语句是有效的:
SalesPerson sales = new Employee();
就像我说的那样,编译时类型定义了可以调用的方法,因此
met2()
本来可以调用。同时,Employee
类没有met2()
,因此实际的调用是不可能的。