Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中的继承和私有变量_Java_Android_Inheritance_Private_Chronometer - Fatal编程技术网

Java中的继承和私有变量

Java中的继承和私有变量,java,android,inheritance,private,chronometer,Java,Android,Inheritance,Private,Chronometer,我正在尝试向android中的Chronometer类添加一个方法。它将开始时间存储在此变量中: private long mBase; 所以我想我能做到 public class MyChronometer extends Chronometer{ public void reset(){ long now = SystemClock.elapsedRealtime(); this.mBase = now; } } 但是安卓工作室告诉我,m

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

private long mBase;
所以我想我能做到

public class MyChronometer extends Chronometer{

    public void reset(){
        long now = SystemClock.elapsedRealtime();
        this.mBase = now;
    }
}
但是安卓工作室告诉我,
mBase
找不到。为什么会这样?我做错了什么?从我对Java继承的理解来看,如果我扩展了一个类,那么我就拥有了我扩展的类的所有方法和变量,然后我可以将它们添加到其中。这是不对的吗?这不包括
mBase
变量吗,即使它是私有的

编辑:本质上,我试图为
mBase

创建一个setter函数,我引用了:

子类不继承其父类的
private
成员。但是,如果超类具有访问其
private
字段的
public
protected
方法,则子类也可以使用这些方法

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

                  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
我引用的是:

子类不继承其父类的
private
成员。但是,如果超类具有访问其
private
字段的
public
protected
方法,则子类也可以使用这些方法

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

                  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
来访问父类的私有字段

这些方法通常仅用于返回私有值

settergetter的代码示例:

参考链接:


您需要使用
getters
来访问父类的私有字段

这些方法通常仅用于返回私有值

settergetter的代码示例:

参考链接:


我认为这只是它的受保护的和公共的成员,而不是私有的。“如果我扩展了一个类,那么我拥有我扩展的类的所有方法和变量”实例拥有它们,但是你的派生类代码不能访问私有的,只有公共的和受保护的。(顺便说一句,它们是“字段”,而不是“变量”。)如果你能做到这一点,
private
就没有意义了!我认为这只是它的受保护的和公共的成员,而不是私有的。“如果我扩展了一个类,那么我拥有我扩展的类的所有方法和变量”实例拥有它们,但是你的派生类代码不能访问私有的,只有公共的和受保护的。(顺便说一句,它们是“字段”,而不是“变量”。)如果你能做到这一点,
private
就没有意义了!我理解这一点,我正在尝试添加一个setter方法。如果最初的类没有一个,我该怎么做呢?我明白这一点,我想做的是添加一个setter方法。如果原始类没有附带一个setter,我该怎么做?然后我该如何为私有变量添加一个setter?是否创建要使用的新变量?我想我可以复制、粘贴并添加我想从原始类中获得的内容,但这感觉有点不对。您创建了一个受保护的或公共的方法,该方法只返回该字段。这就是我所尝试的,但我得到了一个错误,这就是导致我问这个问题的原因。如果我引用这个变量,就像我创建一个公共setter一样,它将不会编译,因为它不知道
mBuilder
是什么。如果它是私有的,那么它是私有的是有原因的,而且作者可能不想让您访问它。您可以使用反射或要求作者更改修饰符:)然后如何为私有变量添加setter?是否创建要使用的新变量?我想我可以复制、粘贴并添加我想从原始类中获得的内容,但这感觉有点不对。您创建了一个受保护的或公共的方法,该方法只返回该字段。这就是我所尝试的,但我得到了一个错误,这就是导致我问这个问题的原因。如果我引用这个变量,就像我创建一个公共setter一样,它将不会编译,因为它不知道
mBuilder
是什么。如果它是私有的,那么它是私有的是有原因的,而且作者可能不想让您访问它。您可以使用反射或要求作者更改修饰符:)