[英]Calling the overridden protected method of a class higher up in the hierarchy
考慮以下Java類
class A
{
protected void methodA()
{
System.out.println("methodA() in A");
}
}
class B extends A
{
protected void methodA() // overrides methodA()
{
System.out.println("methodA() in B");
}
protected void methodB()
{
}
}
public class C extends B // needs the functionality of methodB()
{
public void methodC()
{
methodA(); // prints "methodA() in B"
}
}
我如何在類C的methodC()中調用methodA()? 那可能嗎?
您有幾種選擇。 如果提供了類B的源代碼,則修改類B。如果沒有源代碼,請考慮將代碼注入到類B的methodA()中。 AspectJ可以將代碼插入現有的Java二進制文件中。
變更B級
package com.wms.test;
public class A {
public A() {
}
protected void methodA() {
System.out.println( "A::methodA" );
}
}
package com.wms.test;
public class B extends A {
public B() {
}
protected void methodA() {
if( superA() ) {
super.methodA();
}
else {
System.out.println( "B::methodA" );
}
}
protected void methodB() {
System.out.println( "B::methodB" );
}
protected boolean superA() {
return false;
}
}
package com.wms.test;
public class C extends B {
public C() {
}
protected void methodC() {
methodA();
}
protected boolean superA() {
return true;
}
public static void main( String args[] ) {
C c = new C();
c.methodC();
}
}
然后:
$ javac com/wms/test/*.java $ java com.wms.test.C A::methodA
以下內容不起作用:
protected void methodC() {
((A)this).methodA();
}
這看起來類似於您的問題
您可以編輯B並添加一個調用super.MethodA()的函數嗎? 然后在C中調用它?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.