考虑这个示例代码,我使用普通类首先实现通用概念,然后使用子类来专门化:
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版),在我看来,作者想要传达的是,在泛化 - 专业化方法的情况下,以某种方式使用抽象类更好.但是,我无法理解它比使用普通类更好.使用抽象类本质上强制我们扩展基类,这就是全部; 除此之外,我无法看到实施方面的任何巨大差异.所以有人能让我理解使用抽象类比使用普通类更好的实践/方法吗?
没有"更好"也没有"更糟",这取决于你的目的.
如果子类本身不是抽象类,则抽象类允许声明需要由子类实现的抽象方法.
非抽象不会,您需要实现所有声明的方法.
将抽象类视为"通用"对象,在现实生活中不会存在,但为许多其他具体对象提供了良好的概括.
把非抽象类想象成你可以在现实生活中指点的东西.
使用抽象方法意味着没有人可以实例化该类.
换句话说,没有人可以创建一个Shape然后使用它:它们必须创建一些扩展形状的东西,例如Circle或Rectangle.
永远不能实例化抽象类,这是抽象类的真正优势.
例如,该类Animal可以是一个抽象类; 但在现实生活中,你永远不会有一个实例Animal; 这使得没有任何意义,因为你不能只是建立一个动物,你创建一个动物,如Cat或Dog在现实生活中,因为它们是真实世界的实体.因此,就代码设计与现实世界概念或情况之间的转换而言,抽象类更好,因为它们可以提供对现实世界情况的更全面的描述.
| 归档时间: |
|
| 查看次数: |
4454 次 |
| 最近记录: |