我知道什么是抽象,但是我想知道使用抽象的目的是什么,如果我们必须实现所有功能,为什么不只是编写它们 例如
interface Moveable{
public void move();
}
class Human implements Moveable{
public void move(){
System.out.println("walk");
}
}
//or just write (why use abstraction)
class Human{
public void move(){
System.out.println("walk");
}
}
答案 0 :(得分:1)
有用的抽象用于获得对复杂性的控制。
没有这些有用的抽象,您的第一堂课的前5行会更容易编写。但是在现实世界中,任何有价值的东西都会随着时间增长。用户需要其他功能,出现错误并需要修复等。
如果您不准备为接下来的500行代码做准备,那么在下一个类中,那么该代码将迅速变成维护方面的噩梦。
换句话说:现实世界太复杂了,无法在代码中完全表示出来。因此,您必须预见到应用程序中至关重要的基本“模式”,并找到以更简洁的方式表达它们的方法。
在您的示例中,是的,只有一个类可实现该接口。但是,如果您有50堂课或100堂课怎么办?然后,您的客户代码将必须知道Human,Cat,Dog,Snake等……所有这些类都有一个move()
方法。这真的比能够检查“该类是否实现了Moveable
接口吗?简单吗?!
答案 1 :(得分:1)
使用抽象有两个原因。首先支持推理和沟通;如果考虑到人的主要方面是他或她可以走路,那么对运动的东西的清晰观察是合适的。第二,提供不同实现的统一。假设还有第二种实现方式。
class Tiger implements Moveable{
public void move(){
System.out.println("stalk");
}
}
接口Moveable
提供了访问通用类型的统一方法。话虽如此,如果只有一个接口的实现,则该接口在技术上不是必需的,但仍可以提供实现的清晰度和可伸缩性。