我正在寫一個程序,我創建一個抽象類鳥。在這個類中有一個叫做chirp()的方法,它打印出「chirp」。我做了兩個額外的課程,叫做Goose和Mallard,它們是從Bird延伸出來的,用重複的chirp方法打印出不同的聲音:「Honk」&「Quack」。如果我要添加另一個名爲Crow的擴展自Bird的類,我將如何編寫一個不會覆蓋的方法chirp?抽象類和抽象方法
我的方法是使方法啁啾與不同的方法簽名。我認爲是這樣做的,但不是因爲我想要它而編譯。
此外,如果我是做鳥類抽象我需要什麼樣的變化做出烏鴉類中的方法...
這裏是我的代碼至今:
import java.util.Scanner;
public abstract class Bird {
public void chirp() {
System.out.println("chirp");
}
//if chirp made abstract
public abstract void chirp();
}
public class Goose extends Bird {
public void chirp() {
System.out.println("Honk");
}
}
public class Mallard extends Bird {
public void chirp() {
System.out.println("Quack");
}
}
public class Crow extends Bird {
String sound;
public void chirp(String x) {
sound = x;
}
}
public class Problem10 {
public static void main(String[] args) {
// TODO Auto-generated method stub
//Demonstration of polymorphism
Bird goose = new Goose();
Bird mallard = new Mallard();
goose.chirp();
mallard.chirp();
//Reference Variable
Bird bird = null;
//Prompt the user to enter a number that is either 1 or 2
Scanner scanner = new Scanner(System.in);
System.out.println("Input number either 1 or 2: ");
int inputInt = scanner.nextInt();
if (inputInt == 1) {
bird = new Goose();
}
else if (inputInt == 2) {
bird = new Mallard();
}
else if (inputInt == 3) {
bird = new Crow();
bird.chirp("Crow");
}
bird.chirp();
}
}
'Crow#chrip(String)'不會覆蓋'Bird#chip()',因爲'Crow#chirp'增加了一個在'Bird#chirp'中不存在的參數。你將不得不刪除參數,或重新考慮你的設計 –
那麼,編譯時會發生什麼?什麼是錯誤信息?你不瞭解它嗎?變鳥的類型是什麼?鑑於這種類型,編譯器如何知道該變量引用的對象中有一個方法chirp(String)? –
@Surace:不,抽象類不需要*有一個抽象方法。在上面的例子中註釋掉抽象方法,你會發現它編譯*很好*。 – Makoto