簡體   English   中英

java類A擴展了類B和方法覆蓋

[英]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;
    }
}

聽起來ClassXClassY會有一個共同的界面(如果它們有你想要在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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM