java object类直接子类,在java中,我们可以将超类Object传递给子类引用吗?

In java, can we pass superclass Object to subclass reference ?

I know that it is a weird question/practically not viable,

but I want to understand the logic behind this

Why is it not allowed in 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

}

}

What would have happened if Java allowed compilation of line 1?

Where would the problem arise?

Any inputs/link are welcomes.

解决方案

If your SalesPerson sales = new Employee(); statement was allowed to compile, this would have broken the principles of Polymorphism, which is one of the features that the language has.

Also, you should get familiar with that does compile time type and runtime type mean:

The compile-time type of a variable is the type it is declared as, while the runtime type is the type of the actual object the variable points to. For example:

Employee sales = new SalesPerson();

The compile-time type of sales is Employee, and the runtime type will be SalesPerson.

The compile-time type defines which methods can be called, while the runtime type defines what happens during the actual call.

Let's suppose for a moment that this statement was valid:

SalesPerson sales = new Employee();

As I said, the compile-time type defines which methods can be called, so met2() would have been eligible for calling. Meanwhile, the Employee class doesn't have a met2() and so the actual call would have been impossible.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值