Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/8.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_Methods - Fatal编程技术网

如何在java类中重写单个方法

如何在java类中重写单个方法,java,android,methods,Java,Android,Methods,我对java开发相当陌生,并且不知道如何修改现有的Android类。我想更改Android()中Notification.Builder类中的一些方法 我确实想更改getNotification(),但在新的实现中,我需要访问私有字段(例如,mWhen,mSmallIcon) 我已经尝试扩展该类,但是无法访问超类的私有字段(即,mWhen,mSmallIcon) 更改方法的最佳实践是什么,是复制源代码并修改它吗 更新: 更准确地说:如何在现有类中更改单个方法,并且仍然可以访问现有类的私有字段 谢

我对java开发相当陌生,并且不知道如何修改现有的Android类。我想更改Android()中
Notification.Builder
类中的一些方法

我确实想更改
getNotification()
,但在新的实现中,我需要访问私有字段(例如,
mWhen
mSmallIcon

我已经尝试扩展该类,但是无法访问超类的私有字段(即,
mWhen
mSmallIcon

更改方法的最佳实践是什么,是复制源代码并修改它吗

更新: 更准确地说:如何在现有类中更改单个方法,并且仍然可以访问现有类的私有字段

谢谢大家的回复

私有(内部)类、方法或字段只能从声明它的类中引用。
但是,您也可以声明自己的变量,并按照自己的意愿使用它。

您只需在重写的方法中调用
super.getNotification()
,并在返回结果对象之前修改它。

最佳做法是不重写方法(来自未被设计为重写的第三方类),但是创建一个新的类/方法来包装第三方类。谷歌针对这些问题:“脆弱的基类问题”,“组合重于继承”

我试图扩展这个类,但是我无法访问超类的私有字段(即mWhen、mSmallIcon)

在您要扩展的特定类中,设置这些字段值的方法数量有限。您可以重写这些方法,以保留子类中新字段中值的副本,然后在重写
getNotification()
时使用这些副本

这是一种黑客行为,对于更复杂的类是不可行的

另一个技巧是对字段对象使用反射和调用。根据安全约束,这也可能不可行


如果您说的是您正试图进行的更改,可能有更好的方法。

为什么要更改它?我有一个动态图标(显示温度),我需要为内容和股票代码定制布局。我知道可以通过提供自定义contentView和tickerView来实现,但我更愿意创建自定义生成器。也许传递视图会更好…谢谢,但是我仍然无法访问私有通知字段。Builder(例如,mWhen)@tibnor:是-但是你不需要,因为它们的存在只是为了设置公共通知字段。