我得出的理论是,抽象类方法没有方法体,只有方法签名。虽然方法没有在方法声明中指定abstract关键字,但它会自动转换为JVM中的摘要 那么为什么这个eat()方法有一个正文,为什么它不会在Swan类中覆盖。
public abstract class Animal {
protected int age;
public void eat() {
System.out.println("Animal is eating");
}
public abstract String getName();
}
class Swan extends Animal {
public String getName() {
return "Swan";
}
}
答案 0 :(得分:1)
来自Oracle tutorial:
抽象类与接口相比
抽象类与接口类似。您无法实例化它们,并且它们可能包含使用或不使用实现声明的方法组合。
如果定义一个方法,那么就可以像任何其他超类方法一样引用它。
答案 1 :(得分:1)
我得出的理论是抽象类方法没有方法体,只有方法签名。
这不是一个理论,它是一个事实,在JLS #8.4.3.1 'Abstract methods'中指定,但它适用于抽象方法,而不适用于抽象中的所有方法类
虽然方法没有在方法声明中指定abstract关键字,但它会自动转换为JVM中的抽象。
不,它没有。 JLS #8.1.1.1 'Abstract classes'中没有任何相关内容。
那么这个eat()方法怎么会有一个正文
因为它不是抽象的。
怎么没有在Swan课程中覆盖呢。
我不知道这意味着什么。
答案 2 :(得分:1)
我得出的理论是抽象类方法没有 方法体,只有方法签名。
实际上,Java类和方法都可以是抽象的。抽象方法是一种只能签名的方法。
除其他外,还有一个抽象的Java类:
具体的Java类: