我是通过一个理论,即抽象类方法没有方法主体,而只有方法签名。尽管方法未在方法声明中分配抽象关键字,但它会自动转换为JVM中的摘要。
因此,该方法怎么有一个身体,为什么它不会在天鹅级中覆盖。
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";
}
}
来自Oracle教程:
抽象类与接口相比
抽象类类似于接口。您无法实例化它们,并且它们可能包含有或没有实现的情况下声明的方法的混合。
如果定义了一种方法,则可以像其他任何超级类方法一样引用它。
我是通过一种理论,即抽象类方法没有方法主体,只有方法签名。
这不是理论,它是一个事实,在JLS#8.4.3.1"抽象方法"中指定,而是用于摘要方法,而不是摘要中的所有方法类。
,尽管一种方法未在方法声明中分配抽象关键字,但它自动转换为JVM中的摘要。
不。在JLS#8.1.1.1中没有任何内容"抽象类"。
所以这个饮食如何有一个身体
因为它不是抽象的。
,为什么它不会在天鹅级中覆盖。
我不知道这意味着什么。
我是通过一个理论,即抽象类方法没有 方法主体,只有方法签名。
碰巧的是,Java类和方法都可以抽象。抽象方法是一种可能只有签名的方法。
除其他外,一个抽象的Java类:
- 可能包含抽象方法,具体方法或两者都包含
- 可能不会直接实例化
- 定义类型(就像接口一样)
混凝土Java类:
- 可能不包含抽象方法(仅允许具体方法)
- 可以直接实例化
- 可以定义一种类型,但是接口(有时是抽象的类)通常被更好地用于此目的