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

时间:2012-12-11 16:21:48

标签: java oop

  

可能重复:
  Abstract class in Java

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

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

甚至来自Dietel&迪特尔的书我不明白它的目的。 我们何时,何地以及为何使用它?

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

8 个答案:

答案 0 :(得分:76)

- Abstract class无法实例化的,即 object 不能被创造。

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

- Non-abstract class 只能使用非抽象方法。

- Abstract class 可以同时使用非抽象方法和抽象方法。

- 如果 ClassAbstract method ,则该类也必须为摘要。

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

Abstract class中的

- Design patterns用于封装不断变化的行为。

答案 1 :(得分:74)

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

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

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

您可以在此处详细了解:Abstract Methods and Classes

答案 2 :(得分: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());
    }
}

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

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

答案 3 :(得分:3)

抽象方法没有body。一个定义良好的方法不能被声明为抽象。

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

无法实例化抽象类。

答案 4 :(得分:1)

抽象类是一个无法创建对象的类,因此它主要用于继承。(我不确定你是否可以使用静态方法)

抽象方法是子类必须覆盖的方法,它没有正文,标记为抽象,只有抽象类可以包含这些方法。

答案 5 :(得分:0)

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

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

答案 6 :(得分:0)

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

答案 7 :(得分:-2)

ABSTRACT CLASSES AND ABSTARCT METHODS FULL DESCRIPTION GO THROUGH IT

抽象方法没有body。一个定义良好的方法不能被声明为abstract。

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

抽象类无法实例化。