可能重复:
Java中的抽象类
我得到了几个解释但到目前为止我无法理解Java中的抽象类和方法是什么.
有些人说它必须对程序的安全性做些什么,其他人则表示不是那样的.
即使从Dietel&Dietel的书中我也没有达到它的目的.我们何时,何地以及为何使用它?
请你解释它就像你在教初学者一样,我真的很感谢你的帮助.
Kum*_*tra 76
- Abstract class是它不能被实例化,即其 object 不能被创建.
- Abstract method是方法的没有它的定义声明.
-一个Non-abstract class可以只具有非抽象方法.
-一个Abstract class可以同时具有非抽象和抽象方法.
-如果在Class有Abstract method 那么类也必须是抽象的.
-一个Abstract method 必须由第一个非抽象子类实现.
- Abstract class in Design patterns用于封装不断变化的行为.
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.