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