Java 中的继承和私有变量

Inheritance and private variables in Java

我正在尝试向 android 中的 Chronometer class 添加一个方法。它将开始时间存储在这个变量中:

private long mBase;

所以我认为我可以做到这一点

public class MyChronometer extends Chronometer{

    public void reset(){
        long now = SystemClock.elapsedRealtime();
        this.mBase = now;
    }
}

但是 Android Studio 告诉我找不到 mBase。为什么是这样?我做错了什么?根据我对 Java 中继承的理解,如果我扩展 class,那么我将拥有我扩展的 class 的所有方法和变量,然后我可以将其添加到其中。这是不正确的吗?这不会包括 mBase 变量,即使它是私有的?

编辑:基本上我正在尝试为 mBase

创建一个 setter 函数

我引用 tutorial - Private Members in a Superclass:

A subclass does not inherit the private members of its parent class. However, if the superclass has public or protected methods for accessing its private fields, these can also be used by the subclass.

意味着您不能直接访问private字段,但您可以使用允许您访问它们的方法。这个 table 也可能有帮助:

                  Access Levels
------------+---------+---------+-----------+------
Modifier    |   Class | Package |  Subclass | World
------------+---------+---------+-----------+------
public      |     Y   |    Y    |     Y     |   Y
protected   |     Y   |    Y    |     Y     |   N
no modifier |     Y   |    Y    |     N     |   N
private     |     Y   |    N    |     N     |   N

您需要使用 getters 访问父 class 的私有字段。

这些方法通常仅用于return私有值。

settergetter的代码示例:

参考link:http://docs.oracle.com/javaee/6/tutorial/doc/gjbbp.html

public class Printer {

    @Inject @Informal Greeting greeting;

    private String name;
    private String salutation;

    public void createSalutation() {
        this.salutation = greeting.greet(name);
    }

    public String getSalutation() {
        return salutation;
    }

    public void setName(String name) {
       this.name = name;
    }

    public String getName() {
       return name;
    }
}