Usage of abstract methods and classes unclear
本问题已经有最佳答案,请猛点这里访问。
我正在学习面向对象编程的概念。其中之一是抽象。我理解任何包含抽象方法的类也应该是抽象的,并且抽象类不能被实例化。要使用抽象类,我必须从另一个类继承它。
到现在为止,一直都还不错。下面是代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | 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"); } } |
然后我们有一个使用
1 2 3 4 5 6 7 8 9 10 11 12 13 | 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(); } } |
但我可以在类
1 2 3 |
那么它就不必是
是的,所以在某种意义上抽象类/接口是需要您提供自己的契约实现的契约。例如,您正在编写一个日志记录库,该库可以写入文件、数据库等。请考虑如何强制任何一个库实现持久化基础IO的功能。为了实现这一点,您需要使代码与接口/抽象类的实例一起工作。现在,这两者之间的区别很简单,因为接口没有实现。好吧,直到Java 8,但是没关系,这不是ATM需要关注的。抽象类可以实现某些方法。例如,如果写入尝试未成功,请重试。但是实际的写操作将只存在于实现它的操作中。接口不能。
抽象类在单个程序员项目上没有多大意义。您可以将它们看作是从实现某些方法的类继承的程序员获得的承诺。