抽象类和方法|意见含糊不清

时间:2016-01-29 16:40:46

标签: java abstract-class abstract-methods

我刚刚遇到了关于抽象类的两个不同意见:

1)有人说, 抽象方法不能用于具体(普通)类 ;而抽象类可以同时具有抽象/非抽象方法

2)虽然在youtube上受到高度关注的教程说:“任何有抽象方法的类,都会让它的类自动定义为抽象

第二点与第一点形成鲜明对比;在实现它时,我确实只在第一个概念中取得了成功,而不是第二个概念。但是,如果有人能帮助我耐心,我仍然希望在这方面有一个明确的清晰度。

3 个答案:

答案 0 :(得分:1)

official Java tutorial中所述,"如果一个类包含抽象方法,那么该类本身必须被声明为abstract"。它不会自动变得抽象;它需要明确标记为抽象。

答案 1 :(得分:0)

任何包含抽象方法的类都无法实例化,因为它包含未定义的方法。无论何时创建类的对象,它都必须包含该类的所有内容,并且必须全部定义它们。

因此,您需要将该类声明为抽象,这意味着该类无法实例化。但仅仅因为一个类是抽象的,并不意味着必须只实现抽象方法。例如,您可以在抽象类中使用静态方法,因为调用静态方法属于而不是对象实例上课。

答案 2 :(得分:0)

抽象类可以有方法摘要和非摘要。例如,

public abstract class Employee {
    ...

    //this method would be implemented in those classes that extends from Employee. 
    public abstract void calculateSalary(); 

    public Employee addEmployee() {
         //Method body
    }

但是如果你在非抽象类中声明一个抽象方法,则必须将其自身转换为抽象方法。

另一方面,抽象方法将在抽象父类的继承类中实现。所以你将在泛型类中执行此实现。

我希望这会有所帮助。