簡體   English   中英

Java-超類和子類中的不同方法

[英]Java - Different methods in superclass and subclass

我對Java / Android中的繼承/接口有點困惑,不確定我是否走對了。 基本上,我在Android中使用的是Parcelable,並且由於方法未定義而出現錯誤。

我有一個動物超類,還有幾個子類(狗,貓等)。 在第一個活動中,選擇一個動物,然后將其打包並將其傳遞給第二個活動:

/* Second activity */
Animal myAnimal;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_current_status);

    Intent intent = getIntent();
    myAnimal = intent.getParcelableExtra("animal"); // Gets the animal subclass (dog, cat etc) from the previous activity
    myAnimal.updateImage(myAnimal.getCurrentState());
}

問題是“ updateImage”僅存在於子類中,因此不會在此處編譯。 我不希望這種方法屬於超類,因為輸出會根據動物的類型(例如狗的圖片)而變化。

我也不知道它將是哪種動物,所以我不能將變量定義為頂部的“動物”以外的任何東西。 我確實嘗試將變量定義為所有子類都實現的接口,這確實使'updateImage'可用,但是后來在超類中找不到方法,因為它沒有實現此特定接口。

希望這是有道理的,任何有關我應如何解決此問題的建議將不勝感激。

我不希望此方法屬於超類,因為輸出會根據動物的類型而有所不同

這可以。 在超類中將其定義為抽象方法,然后需要每個子類來實現它。

public abstract class Animal {

    public void abstract updateImage();
}

public class Dog extends Animal {

    public void updateImage() {
        // Do dog-specific stuff here
    }
}

public class Cat extends Animal {

    public void updateImage() {
        // Do cat-specific stuff here
    }
}

注意,由於您沒有提供有關從getCurrentState返回的類型的信息,因此我沒有將state參數添加到updateImage方法。

該鏈接將對您有所幫助: http : //www.java-made-easy.com/java-inheritance.html

用updateImage方法abstract聲明Animal類抽象,並在子類中實現它。 您可以在這里找到有用的東西

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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