这个问题在这里已有答案:
我正在学习面向对象编程的概念。其中之一就是抽象。我知道任何包含抽象方法的类都应该是抽象的,并且抽象类不能被实例化。要使用抽象类,我必须从另一个继承它。
到现在为止还挺好。我们来看下面的代码:
public abstract class Games {
public abstract void start();
public void stop(){
System.out.println("Stopping game in abstract class");
}
}
class GameA extends Games{
public void start(){
System.out.println("Starting Game A");
}
}
class GameB extends Games{
public void start(){
System.out.println("Starting Game B");
}
}
然后我们有一个使用main
方法的类:
public class AbstractExample {
public static void main(String[] args){
Games A = new GameA();
Games B = new GameB();
A.start();
A.stop();
B.start();
B.stop();
}
}
但是我可以在课程Games
中写下以下内容:
public void start(){
System.out.print("");
}
然后它不必是abstract
,输出将是相同的,我甚至可以实例化Games
类。那么制作抽象方法和类的关键是什么?
是的,所以在某种意义上,抽象类/接口是需要您提供自己的合同实现的合同。例如,您正在编写一个可以写入文件,数据库等的日志库。请考虑如何强制任何人实现持久保存到底层io的功能。为此,您可以使代码与接口/抽象类的实例一起使用。现在,这两者之间的区别就像接口没有实现一样简单。好吧,直到Java 8,但没关系,这不是关心ATM的事情。您的抽象类可以实现某些方法。例如,如果您的写入尝试没有成功则重试。但实际的写操作只存在于实现它的那个中。界面不能。
抽象类在单个程序员项目中没有多大意义。您可以将它们看作是继承自该类实现某些方法的程序员所获得的承诺。