抽象类方法是否具有body



我是通过一个理论,即抽象类方法没有方法主体,而只有方法签名。尽管方法未在方法声明中分配抽象关键字,但它会自动转换为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类:

  • 可能不包含抽象方法(仅允许具体方法)
  • 可以直接实例化
  • 可以定义一种类型,但是接口(有时是抽象的类)通常被更好地用于此目的

最新更新