当前位置: 首页 > 知识库问答 >
问题:

父类中的Setter,以及一些没有参数的子类

陶沛
2023-03-14

我想知道如果为某个参数创建一个带有空setter方法的父类,然后创建几个扩展该类的类,但不是所有的类都有该参数,会发生什么。在参数存在的类中调用set方法时,它会设置param。在参数不存在的类中,不会发生任何事情,例如:

class Parent{
    void setParam(String param){};
}

class A extends Parent{
    String param;
    public void setParam(String param){
        this.param = param;
    }
}

class B extends Parent{
    String otherParam;
    public void setOtherParam(String param){
        this.otherParam = param;
    }
}

因此,如果我们创建类A,将其上转换为Pak,并尝试setParam(),属性参数将被设置。

Parent parent = new A();
parent.setParam("PARAM");

A{param='PARAM'}

如果我们对类B也这样做,尝试setParam()什么都不会发生。

有人能解释一下“引擎盖下”发生了什么吗?我希望得到一个例外,因为我试图设置一个不存在的参数

共有1个答案

傅旺
2023-03-14

类A已重写父类的方法setParam。即使将一个实例指定为父类,对A.setParam()的调用仍然表现为子类A。这就是所谓的“子类多态性”。

B类不覆盖父类。因此,b.setParam()只是调用b的父对象的setParam方法,什么也没有发生。

 类似资料:
  • 有没有一种简单的方法可以从OWLAPI中的OWL本体中只检索根类?这里我指的是没有断言父类的命名类。增加了复杂性,尝试不使用reasoner,因为本体是巨大的,并且reasoner没有在足够快的时间内完成(通常)。一如既往的感谢!

  • 有如下代码: 打印结果: 1、在实例化Child时,Parent.constructor中的name为什么是'Parent'? Child.constructor中调用super,内部this指向为Child,所以不应该是'Child'吗? 2、诸如x = 'a'的实例属性是什么时候完成初始化的? Child.constructor中调用super时,可以看到打印了'Parent name ini

  • 我有以下JPA实体结构。 我想写一个JPA查询,它将返回给定parent_id的PARENT_NAME和所有子级的计数。 t我能想到的唯一解决办法是加入并编写一个复杂的条件查询。 我想不出使用简单的JPA查询获得结果的方法。 有更简单的方法吗?

  • 我有java中的类:。和类,它扩展了类。 Class保留Class的实例。 我注意到,当我调用类B的构造函数时(当我在类A中初始化这个参数时),它会执行super(),创建一个新的实例A,并初始化所有It字段。 我如何告诉class

  • 我是C语言的新手,正在寻找关于以下问题的建议。我正试图创建一个程序,生成树的形状(是的,真正的树)。这些形状完全由树枝构成。为此,我开始编写一个名为Branch的类。主要的想法是。cpp I创建一个类Branch的实例,它本身将创建Branch的实例。这适用于迭代。 目前,该计划的结构如下: main.cpp: 树枝h: 树枝cpp: 现在,这个程序可以工作,但是我想通过将每个对象存储在一个向量中

  • 问题内容: 我有一个孩子类,两个父母的函数名称相同。 我需要根据构造函数()决定(基于要创建的对象的类型)哪个子类的对象需要调用哪个父类的函数。有没有一种方法可以将默认函数调用动态链接/切换到父对象之一。下面给出了示例代码。我不想使用对象容器,因为它很难维护和重构。 下面给出一种方法,但是涉及到复制所有父类函数,这太过分了: 问题答案: Python提供了很多灵活性,但是您正在与该语言提供的类机制