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

如果在父级和子级中都定义了相同的私有实例变量,行为将如何?

李昌勋
2023-03-14

案例1:在下面的代码中,若子对象仅继承(不重写)getPrivateString,则使用子对象的引用调用getPrivateString返回父变量的值。Output=“Variable:父类中的私有访问说明符”。

案例2:在下面的代码中,若子对象覆盖getPrivateString(定义与父对象相同),则使用子对象的引用调用getPrivateString将返回子变量的值。Output=“变量:子类中的私有访问说明符”。有谁能解释一下这一点,因为在继承中,方法实际上只是子定义代码中的一部分。我想了解变量选择过程。

父母亲JAVA

package learnInheritance.parent;

public class Parent 
{

    private String privateString = "Variable: private access specifier in Parent Class";

    public String getPrivateString()
    {
        return this.privateString;
    }
    @Override
    public String toString()    
    {
        return this.getClass().getName();
    }

}

小孩JAVA

package learnInheritance.child;

import learnInheritance.parent.Parent;

public class Child extends Parent
{

    private String privateString = "Variable: private access specifier in Child Class";

    /*
    @Override
    public String getPrivateString()
    {
        return this.privateString;
    }
    */
    @Override
    public String toString()    
    {
        return this.getClass().getName();
    }


    public static void main(String [] str)
    {
        Parent parent=new Parent(); 
        Child child=new Child();

        System.out.println("parent.getPrivateString() = " + parent.getPrivateString());
        System.out.println("child.getPrivateString() = " + child.getPrivateString());


    }

共有2个答案

易刚捷
2023-03-14

在第一个示例中,Child不重写该方法,因此调用Parent方法,并引用它自己的变量。在第二个示例中,调用了Child方法,它引用Child中的变量。

子类无法访问其父类的私有成员。父类无法访问其子类中的任何变量。换句话说,没有所谓的“变量重写”——重写只针对方法

万俟浩
2023-03-14

private字段(根据定义)不会被继承。您的“第二种情况”称为变量隐藏,当(在Wikipedia文章中)在某个范围内声明的变量(决策块、方法或内部类)与在外部范围内声明的变量具有相同的名称时,就会发生这种情况。

 类似资料:
  • 问题内容: 假设我们有一个包含私有实例变量的类。 现在,让我们有另一个类,其中。如果在中没有定义访问器方法,可以在访问变量中使用非静态方法吗? 顺便说一下,我在用Java工作。 问题答案: 不,不符合Java语言规范,第3版: 6.6.8示例:私有字段,方法和构造函数 私有类成员或构造函数只能在包含该成员或构造函数声明的顶级类(第7.6节)的主体内访问。它不是子类继承的。 但是不管这种语言限制如何

  • 问题内容: public class A{ private int getC(){ return 0; } } 您能告诉我是否有可能通过java中的反射来做一些吸引人的事情吗? 问题答案: class A{ 编辑:这是一个安静的老帖子,但增加了一些建议 重新考虑您的设计 调用父方法的私有方法,虽然可以通过反射实现,但是不应该这样做。在父对象上调用私有方法可能会使类处于无效状态,并可能导致意外行为。

  • 问题内容: MYSQL返回一个数组,如下所示。我正在使用列:“ id_parent”自引用表以创建层次结构。因此,“ id”为2的条目可以是“ id_parent”为2的任何条目的父级,依此类推。 如何将子级嵌套在其父级数组中的数组中 问题答案: 引用具有顺序无关紧要的优点(子节点可以位于其父节点之前):

  • index.js Button.js 我的问题是“如何从Button.js到index.js获取标志值”?(儿童对父母)。

  • 我尝试了第二个查询的子表的-join,但它没有给出理想的结果。 我的第一个查询工作良好,我得到了正确的父列表,我的问题是没有得到所有的孩子当我运行第二个查询。如何解决这个问题?

  • 问题内容: 我要删除,因此要从数据库中删除行。 我 确实 要删除某个实体及其所有行。不过,我 不 希望从它删除任何行。 如何 我能做到这一点? 是,并且是我要删除的实体。 请参阅下面的代码,了解我如何在“狗窝实体”中链接2: 目前,当我删除狗entitie(S),其相关的养犬实体 中 也被删除。 编辑:将狗映射到狗窝: 问题答案: 当前,当我删除狗实体时,其相关的狗窝实体也将被删除。 原因是您已设