什么是抽象类和抽象方法?

Ume*_*san 41 java oop

可能重复:
Java中的抽象类

我得到了几个解释但到目前为止我无法理解Java中的抽象类和方法是什么.

有些人说它必须对程序的安全性做些什么,其他人则表示不是那样的.

即使从Dietel&Dietel的书中我也没有达到它的目的.我们何时,何地以及为何使用它?

请你解释它就像你在教初学者一样,我真的很感谢你的帮助.

Kum*_*tra 76

- Abstract class是它不能被实例化,即 object 不能被创建.

- Abstract method方法的没有它的定义声明.

-一个Non-abstract class可以只具有非抽象方法.

-一个Abstract class可以同时具有非抽象和抽象方法.

-如果ClassAbstract method 那么类也必须是抽象的.

-一个Abstract method 必须由第一个非抽象子类实现.

- Abstract class in Design patterns用于封装不断变化的行为.


Avi*_*gal 75

抽象类是无法实例化的类.它的唯一目的是扩展其他类.

抽象方法是抽象类中的方法(必须声明为abstract),这意味着扩展的具体类必须覆盖它们,因为它们没有主体.

抽象类的主要目的是在子类中使用公共代码,但抽象类不应该有自己的实例.

您可以在这里阅读更多相关信息:抽象方法和类

  • 扩展具体类必须覆盖抽象方法. (4认同)

Ted*_*opp 16

抽象方法是没有正文的方法签名声明.例如:

public abstract class Shape {
    . . .

    public abstract double getArea();
    public abstract double getPerimeter();
}
Run Code Online (Sandbox Code Playgroud)

方法getArea()getPerimeter()抽象.因为Shape类有一个抽象方法,所以它也必须声明abstract.也可以在abstract没有任何抽象方法的情况下声明类.当一个类是抽象的时,就不能创建它的实例; 一个人只能创建(具体)子类的实例.具体类是未声明为抽象的类(因此没有抽象方法并实现所有继承的抽象方法).例如:

public class Circle extends Shape {
    public double radius;
    . . .

    public double getArea() {
        return Math.PI * radius * radius;
    }

    public double getPerimeter() {
        return 2.0 * Math.PI * radius;
    }
}
Run Code Online (Sandbox Code Playgroud)

这样做有很多原因.一种方法是编写一个对所有形状都相同的方法,但这取决于该Shape级别未知的特定于形状的行为.例如,可以编写方法:

public abstract class Shape {
    . . .

    public void printArea(PrintStream out) {
        out.println("The area is " + getArea());
    }
}
Run Code Online (Sandbox Code Playgroud)

不可否认,这是一个人为的例子,但它显示了基本思想:根据未指明的行为来定义具体行为.

拥有抽象类的另一个原因是,您可以部分实现接口.接口中声明的所有方法都由实现接口的任何类继承为抽象方法.有时您希望在类中提供接口的部分实现,并将详细信息留给子类; 部分实现必须声明为abstract.