我正在写一个程序,我创建一个抽象类鸟。在这个类中有一个叫做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