您不能指定主体来抽象方法。抽象方法意味着它们是不完整的。
我想你需要更多地了解接口和抽象类。
要了解接口和抽象类在 Java 或任何其他面向对象编程语言中的含义,您应该首先了解继承。
遗产
考虑一辆汽车和一辆公共汽车。它们是两种不同的车辆。但是它们仍然具有一些共同的特性,例如它们具有转向、制动器、齿轮、发动机等。
因此,使用继承概念,这可以表示为以下内容。
public class Vehicle {
public Driver driver;
public Seat[] seatArray; //In java and most of the Object Oriented Programming(OOP) languages, square brackets are used to denote arrays(Collections).
//You can define as many properties as you want here..
}
现在是自行车..
public class Bicycle extends Vehicle {
//You define properties which are unique to bicycles here..
public Pedal pedal;
}
还有车..
public class Car extends Vehicle {
public Engine engine;
public Door[] doors;
}
这就是继承。如上所示,我们使用它们将对象分类为更简单的基本形式及其子形式。
抽象类
抽象类是不完整的对象。为了进一步理解它,让我们再次考虑车辆类比。
可以驾驶车辆。正确的?但是不同的车辆以不同的方式驾驶。例如,您不能像驾驶自行车一样驾驶汽车。
那么如何表示车辆的驱动功能呢?更难检查它是什么类型的车辆并用它自己的功能来驱动它;添加新类型的车辆时,您将不得不一次又一次地更改 Driver 类。
这就是抽象类和方法的作用。您可以将驱动方法定义为抽象的,以告知每个继承子必须实现此功能。
所以如果你修改车辆类..
//......Code of Vehicle Class
abstract public void Drive();
//.....Code continues
自行车和汽车还必须指定如何驾驶它。否则代码将无法编译并引发错误。
简而言之..抽象类是具有一些不完整功能的部分不完整类,继承的孩子必须自己指定。
接口
接口是完全不完整的。它们没有任何属性。他们只是表明继承的孩子有能力做某事..
假设你有不同类型的手机。他们每个人都有不同的方式来完成不同的功能;例如:打电话给一个人。手机制造商指定如何操作。在这里,手机可以拨打一个号码——也就是说,它是可拨号的。让我们将其表示为一个接口。
public interface Dialable {
public void Dial(Number n);
}
此处 Dialable 的制造商定义了如何拨打号码。您只需要给它一个号码即可拨打。
Dialable myPhone1 = new Dialable() {
public void Dial(Number n) {
//Do the phone1's own way to dial a number
}
}
Dialable myPhone2 = new Dialable() {
public void Dial(Number n) {
//Do the phone2's own way to dial a number
}
}
在这里,通过使用接口而不是抽象类,您不必担心它的属性。例如:是否有触摸屏或拨号盘,是固定座机电话还是手机。你只需要知道它是否可以拨号。它是否继承(或实现) Dialable 接口。
开发人员通常使用接口来确保对象之间的互操作性,只要它们共享一个共同的功能(就像您可以更改为固定电话或手机一样,只要您只需拨打一个号码即可)。简而言之,接口是抽象类的更简单版本,没有任何属性。
另请注意,您可以实现(继承)任意数量的接口,但您只能扩展(继承)单个父类。
更多信息
抽象类与接口
Stackoverflow 中的另一个类似问题