代码之家  ›  专栏  ›  技术社区  ›  Dimon

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

  •  0
  • Dimon  · 技术社区  · 2 年前

    在参数存在的类中调用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,将其向上投射到父级,然后尝试 setParam() ,物业 param 将被设置。

    Parent parent = new A();
    parent.setParam("PARAM");
    
    A{param='PARAM'}
    

    如果我们对B班也这么做 setParam() 什么都不会发生。

    有人能解释一下“幕后”发生了什么吗?我希望得到一个异常,因为我试图设置一个不存在的参数。

    2 回复  |  直到 2 年前
        1
  •  1
  •   14sxlin    2 年前

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

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

        2
  •  0
  •   Shahood ul Hassan babadaba    2 年前

    在里面 Parent setParam()

    A 覆盖 setParam() 并向其添加一行代码。班 B 另一方面,它不会覆盖此方法。 那么,什么时候 setParam() 在一个实例上调用 A. ,即 A. 执行,并将提供的值分配给成员变量 param ; 然而,当调用 B ,即 父母亲 被执行,但什么也没有发生,因为它在中是空的 父母亲 .

    所以,在这种情况下,“幕后”什么都没有发生。