【问题标题】:Java: Private variables used in inherited methodsJava:继承方法中使用的私有变量
【发布时间】:2015-10-26 12:29:24
【问题描述】:

我是Java的新手,据我所知,Shape类中的变量drawingChar是私有的,所以它不被Test类继承,但是由于setDrawingChar()是一个公共函数,所以它被继承了。

public class Shape {

    private char drawingChar = '*'; // private var

    public void setDrawingChar(char drawingChar) {
        this.drawingChar = drawingChar;
    }
} 
public class Test extends Shape{

    public static void main(String[] args) {
        Test t2 = new Test();
    t2.setDrawingChar('*'); // call setDrawingChar on a Test obj
    }
}

在Test 类中,不知何故我被允许在Test 对象上调用setDrawingChar(),但是Test 不继承drawingChar 不是真的吗?如果是这样,在对象 t2 的情况下,this.drawingChar 指的是什么?

【问题讨论】:

  • 它确实继承了drawingCharprivate 表示您不能在其类之外直接访问它。这并不意味着它不存在。
  • 不是,这就是为什么你有一个 setter 在那里 - 你不知道有哪些私人成员存在,但你仍然可以设置绘图椅。
  • 哦,所以私有与继承无关...谢谢!

标签: java private


【解决方案1】:

子类将继承任何publicprotected 变量或方法,并且可以选择不理会它们或覆盖它们(在方法的情况下)。这就是您可以调用方法setDrawingChar 的原因,它会检查Test 以查找具有该名称的任何方法,然后检查其超类的实现。它从Shape 中找到实现并执行它。

请注意,您将无法使用 Shape 变量 drawingChar,因为 private 范围仅限于其他 Shape 对象而不是它们的子类

更多关于publicprivateprotected的信息,请访问javadocs website for access control

【讨论】:

    猜你喜欢
    • 2018-09-19
    • 2015-09-14
    • 2013-03-11
    • 1970-01-01
    • 2014-11-17
    • 2012-09-27
    • 1970-01-01
    • 2014-04-06
    • 2013-01-01
    相关资源
    最近更新 更多