42

可能重复:
Java 中的抽象类

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

一些人说它必须与程序的安全性有关,另一些人说它不是那样的。

即使从迪特尔和迪特尔的书中,我也没有明白它的目的。我们何时、何地以及为什么使用它?

请像教初学者一样解释它,我非常感谢您的帮助。

4

8 回答 8

78

- Abstract class是一个不能被实例化的,即 object 不能被创建。

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

- ANon-abstract class只能有非抽象方法。

- AnAbstract class可以同时具有非抽象和抽象方法。

- 如果Class那么Abstract method 类也必须是抽象的。

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

- Abstract class inDesign patterns用于封装不断变化的行为。

于 2012-12-11T16:38:06.263 回答
76

抽象类是不能实例化的类。它的唯一目的是扩展其他类。

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

抽象类的主要目的是如果您有在子类中使用的通用代码,但抽象类不应该有自己的实例。

您可以在此处阅读有关它的更多信息:抽象方法和类

于 2012-12-11T16:24:39.367 回答
16

抽象方法是没有主体的方法签名声明。例如:

public abstract class Shape {
    . . .

    public abstract double getArea();
    public abstract double getPerimeter();
}

方法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;
    }
}

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

public abstract class Shape {
    . . .

    public void printArea(PrintStream out) {
        out.println("The area is " + getArea());
    }
}

诚然,这是一个人为的例子,但它显示了基本思想:根据未指定的行为定义具体行为。

拥有抽象类的另一个原因是您可以部分实现接口。接口中声明的所有方法都作为抽象方法被任何实现该接口的类继承。有时您想在类中提供接口的部分实现,并将细节留给子类;部分实现必须声明为抽象的。

于 2012-12-11T16:28:42.677 回答
3

抽象方法没有主体。定义明确的方法不能声明为抽象的。

具有抽象方法必须声明为 abstract

抽象类不能被实例化。

于 2012-12-11T16:33:34.993 回答
1

抽象类是不能从中创建对象的类,因此它主要用于继承。(我不确定您是否可以在其中包含静态方法)

抽象方法是子类必须重写的方法,它没有主体,被标记为抽象,只有抽象类才能拥有这些方法。

于 2012-12-11T16:26:56.190 回答
0

使用抽象类,您可以为其他类扩展某种骨架。

你不能实例化它们,但你可以放置一些通用的实现,你可以在扩展它们的类中使用它们。

于 2012-12-11T16:27:42.380 回答
0

一旦你了解了抽象在 Java 中的含义,你会问:他们为什么把它放进去?Java 可以在没有抽象的东西的情况下工作,但它构成了某种 OO 风格或词汇的一部分。确实存在抽象类或方法是表达程序作者意图的优雅方式的情况。大多数情况下,您正在编写将被其他人使用的框架或库。

于 2012-12-11T16:29:26.593 回答
-2

抽象类和抽象方法完整描述通过它

抽象方法没有主体。定义明确的方法不能声明为抽象的。

具有抽象方法的类必须声明为抽象。

抽象类不能被实例化。

于 2012-12-11T16:25:29.653 回答