可能重复:
Java 中的抽象类
我得到了几个解释,但到目前为止我无法理解 Java 中的抽象类和方法是什么。
一些人说它必须与程序的安全性有关,另一些人说它不是那样的。
即使从迪特尔和迪特尔的书中,我也没有明白它的目的。我们何时、何地以及为什么使用它?
请像教初学者一样解释它,我非常感谢您的帮助。
可能重复:
Java 中的抽象类
我得到了几个解释,但到目前为止我无法理解 Java 中的抽象类和方法是什么。
一些人说它必须与程序的安全性有关,另一些人说它不是那样的。
即使从迪特尔和迪特尔的书中,我也没有明白它的目的。我们何时、何地以及为什么使用它?
请像教初学者一样解释它,我非常感谢您的帮助。
- Abstract class
是一个不能被实例化的,即它 object
不能被创建。
- Abstract method
是没有定义的方法声明。
- ANon-abstract class
只能有非抽象方法。
- AnAbstract class
可以同时具有非抽象和抽象方法。
- 如果有Class
那么Abstract method
类也必须是抽象的。
-必须由第一个非抽象子类实现。Abstract method
- Abstract class
inDesign patterns
用于封装不断变化的行为。
抽象类是不能实例化的类。它的唯一目的是扩展其他类。
抽象方法是抽象类中的方法(必须声明为抽象),这意味着扩展的具体类必须覆盖它们,因为它们没有主体。
抽象类的主要目的是如果您有在子类中使用的通用代码,但抽象类不应该有自己的实例。
您可以在此处阅读有关它的更多信息:抽象方法和类
抽象方法是没有主体的方法签名声明。例如:
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());
}
}
诚然,这是一个人为的例子,但它显示了基本思想:根据未指定的行为定义具体行为。
拥有抽象类的另一个原因是您可以部分实现接口。接口中声明的所有方法都作为抽象方法被任何实现该接口的类继承。有时您想在类中提供接口的部分实现,并将细节留给子类;部分实现必须声明为抽象的。
抽象方法没有主体。定义明确的方法不能声明为抽象的。
具有抽象方法的类必须声明为 abstract。
抽象类不能被实例化。
抽象类是不能从中创建对象的类,因此它主要用于继承。(我不确定您是否可以在其中包含静态方法)
抽象方法是子类必须重写的方法,它没有主体,被标记为抽象,只有抽象类才能拥有这些方法。
使用抽象类,您可以为其他类扩展某种骨架。
你不能实例化它们,但你可以放置一些通用的实现,你可以在扩展它们的类中使用它们。
一旦你了解了抽象在 Java 中的含义,你会问:他们为什么把它放进去?Java 可以在没有抽象的东西的情况下工作,但它构成了某种 OO 风格或词汇的一部分。确实存在抽象类或方法是表达程序作者意图的优雅方式的情况。大多数情况下,您正在编写将被其他人使用的框架或库。