我可以在不使用 abstract 关键字的情况下构造抽象方法吗?

我明白我们只能在抽象类中定义抽象方法。

我也明白我们不能自己实例化一个抽象类;它必须被继承(扩展)。

而且我知道抽象方法需要子类为其提供实现。

我唯一的问题是我是否可以在不使用“抽象”关键字的情况下定义该抽象方法。

类似于我在这篇网络文章中读到的内容:

public abstract Animal
{ 
    public void makeNoise();
}

我觉得是 不可以 的。

上面你提供的代码中的 makeNoise() 应该是不抽象的。

抽象类中可以有抽象方法和非抽象方法。

抽象类就是不能使用 new方法进行实例化的类,即没有具体实例对象的类。抽象类有点类似“模板”的作用,目的是根据其格式来创建和修改新的类。对象不能由抽象类直接创建,只可以通过抽象类派生出新的子类,再由其子类来创建对象。当一个类被声明为抽象类时,要在这个类前面加上修饰符abstract.

在抽象类中的成员方法可以包括一般方法和抽象方法

抽象方法就是以 abstract 修饰的方法,这种方法只声明返回的数据类型、方法名称和所需的参数,没有方法体,也就是说抽象方法只需要声明而不需要实现。

当一个方法为抽象方法时,意味着这个方法必须被子类的方法所重写,否则其子类的该方法仍然是 abstract的,而这个子类也必须是抽象的,即声明为 abstract.

抽象类中不一定包含抽象方法,但是包含抽象方法的类一定要被声明为抽象类。抽象类本身不具备实际的功能,只能用于派生其子类。抽象类中可以包含构造方法,但是构造方法不能被声明为抽象。

调用抽象类中的方法(抽象方法和非抽象方法),如果方法是static的,直接调用抽象类的方法就可以了。

如果是非static的则必须需要一个继承的非抽象类,然后用这个非抽象类的实例来调用方法。


抽象类不要求类中的方法必须是抽象的。

顺便考古了下:

You can create an interface which is a set of abstract methods without using abstract keyword. If you create an abstract class, then every abstract method should have the abstract keyword.

上面的内容来源于:inheritance - Can I define an abstract method without the use of abstract keyword in Java? - Stack Overflow

简单来说,接口中的方法可以不使用抽象关键字,如果是抽象类,抽象类中的抽象方法,需要使用 abstract 关键字。

2022-12-06_12-31-58

所以,应该还是需要使用抽象关键字来定义抽象方法的。