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

拉吉尔·孔卡尔(Rajul Konkar):

在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行会发生什么?问题将在哪里出现?

欢迎任何输入/链接。

康斯坦丁·约夫科夫(Konstantin Yovkov):

如果您的SalesPerson sales = new Employee();语句被允许编译,那么这将破坏多态性的原理,这是该语言具有的功能之一。

另外,您应该熟悉编译时间类型运行时类型的含义:

变量编译时类型是声明为的类型,而运行时类型是变量指向的实际对象的类型。例如:

Employee sales = new SalesPerson();  

的编译时类型salesEmployee,运行时类型为SalesPerson编译时类型定义可以调用的方法,而运行时类型定义实际调用期间发生的事情。

让我们暂时假设此语句是有效的:

SalesPerson sales = new Employee();

如我所说,编译时类型定义了可以调用的方法,因此met2()可以进行调用。同时,Employee该类没有met2(),因此实际的调用将是不可能的。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

我们可以使用Object类的实例作为HashMap中的键吗

在Java中,我们可以将一个类分为多个文件吗?

将通用子类型类信息传递给Java中的超类

我们可以将额外的参数传递给beego路由器吗

我们可以将字符作为Java中整数数组的索引传递吗

我们可以将什么参数传递给super()?

我们可以将函数作为参数传递吗

我可以通过Java中的超类引用访问子类对象的属性吗?

我们可以访问自定义函数中传递给组件的道具吗

AnimationController:我们可以将TickerProvider vsync传递给另一个类吗?

我们可以将命令行参数传递给ant target吗

我们可以@Override派生类中超类的公共方法吗?

我们可以在Java中将Url路径和文件名传递给FileOutputStream吗

我们可以将GET数据传递给CSS吗?

我们可以在C#的基类中捕获子类方法的异常吗?

我可以将属于类数组的子类或属于该类数组的子组件传递给C ++中的函数吗?

我们可以动态地将值传递给Spring bean定义的参数吗?

我们可以在tcl 8.5中将选项传递给tcl source命令吗

我们可以在url参数中传递null吗?

我们如何不用引用就可以通过引用将数组传递给函数

我们可以将jsp中的会话范围列表传递给do get url servlet请求吗?

为什么我们不能使用超类的引用变量来访问其子类的方法(超类中没有的方法)?

我们可以在 printf 中传递指针吗?

我们可以将模型传递给 eloquent Laravel 的 updateOrCreate 方法吗?

我们可以创建一个不能从类中调用任何方法的类(超类或子类)的对象吗?

我们可以将列表传递给permission_required 吗?

我们可以将 x_com 变量作为参数传递给 DAG 中的下一个任务吗?

我们可以将具有多个元素的 gitlab 变量传递给 shell 脚本吗

在Java中,我们可以在子类本身和子类的方法之外创建子类的对象吗?