[英]java class A extends class B, and method override
public class A {
protected ClassX a;
public void foo() {
operations on a;
}
}
public class B extends A {
private ClassY b; // ClassY extends ClassX
@Override
public void foo() {
//wanna the exact same operation as A.foo(), but on b;
}
}
對不起這么不明確的標題。 我的問題是:在B類中,當我調用foo()時,我想要與A類完全相同的操作。 如何從A中獲取相同的代碼並且不重復相同的代碼? 如果我在B類中省略foo(),它會起作用嗎? 或者當我在foo()中調用super.foo()時發生了什么;
由於ClassY擴展了ClassX,因此您可以從類B中刪除private ClassY b
。然后,您可以將ClassX a
實例設置a
實例變量。 這允許foo()
在類B中繼承,但仍然使用相同的邏輯和實例變量。
public class A {
protected ClassX a
public void foo() {
// operations on a;
}
}
public class B extends A {
// do something to set an instance of ClassY to a; for example...
public void setClassY(ClassY b){
this.a = b;
}
}
聽起來ClassX
和ClassY
會有一個共同的界面(如果它們有你想要在ClassY
上調用的相同方法,至少)。 你有沒有考慮過讓foo()
接受一個普通接口類型的對象?
public class A {
private ClassX a;
protected void foo(ClassXAndClassYInheritMe anObject) {
operations on anObject;
}
public void foo() {
foo(a);
}
}
public class B {
private ClassY b;
@Override
public void foo() {
foo(b);
}
}
如果你想要與A中的操作相同的操作,不要在B中定義foo()方法。如果你想要一個不同的操作作為A,覆蓋B中的foo()方法。如果你想擴展foo()方法在B中,它首先在A中然后在B中進行操作,然后在方法的頂部調用super.foo(); 如果你希望A中的操作在B中的操作之后,那么在方法foo()的末尾調用super.foo()。
您可以在覆蓋的方法中執行super.foo()
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.