为什么使用抽象类比继承使用普通类更好?

Mis*_*u4u 7 java inheritance

考虑这个示例代码,我使用普通类首先实现通用概念,然后使用子类来专门化:

package check;
class figure{
  void area(){
  System.out.println("\n Superclass for any figure"); //An useless print statement
  }
}

class triangle extends figure{
  void area()
  {
    System.out.println("\n Code to determine area of a triangle");
  }
}
Run Code Online (Sandbox Code Playgroud)

对于使用抽象类的相同实现,代码将是:

abstract class figure1{
  abstract void area();
}

class triangle1 extends figure1{
  void area()
  {
    System.out.println("\n Code to determine area of a triangle");
  }
}
Run Code Online (Sandbox Code Playgroud)

现在在JAVA中阅读我的教科书(Herbert Schildt,完全参考,第7版),在我看来,作者想要传达的是,在泛化 - 专业化方法的情况下,以某种方式使用抽象类更好.但是,我无法理解它比使用普通类更好.使用抽象类本质上强制我们扩展基类,这就是全部; 除此之外,我无法看到实施方面的任何巨大差异.所以有人能让我理解使用抽象类比使用普通类更好的实践/方法吗?

Men*_*ena 8

没有"更好"也没有"更糟",这取决于你的目的.

如果子类本身不是抽象类,则抽象类允许声明需要由子类实现的抽象方法.

非抽象不会,您需要实现所有声明的方法.

将抽象类视为"通用"对象,在现实生活中不会存在,但为许多其他具体对象提供了良好的概括.

把非抽象类想象成你可以在现实生活中指点的东西.


Mar*_*sto 7

使用抽象方法意味着没有人可以实例化该类.

换句话说,没有人可以创建一个Shape然后使用它:它们必须创建一些扩展形状的东西,例如Circle或Rectangle.

  • 同样在抽象类中,您可以使用抽象方法,在类实现它之前不需要函数定义 (2认同)

bla*_*her 7

永远不能实例化抽象类,这是抽象类的真正优势.

例如,该类Animal可以是一个抽象类; 但在现实生活中,你永远不会有一个实例Animal; 这使得没有任何意义,因为你不能只是建立一个动物,你创建一个动物,如CatDog在现实生活中,因为它们是真实世界的实体.因此,就代码设计与现实世界概念或情况之间的转换而言,抽象类更好,因为它们可以提供对现实世界情况的更全面的描述.