sug*_*nya 8 java oop abstract-class interface
例如,房地产建造者正在建造一个有许多单位的公寓.除卧室外,公寓的所有客房均采用相同的设计.卧室设计留给拥有公寓的人们,即; 床的房间可以是不同的设计,适合不同的公寓.
我可以通过以下abstract类来实现这一点:
public abstract class Flat
{
//some properties
public void livingRoom(){
//some code
}
public void kitchen(){
//some code
}
public abstract void bedRoom();
}
}
Run Code Online (Sandbox Code Playgroud)
一implementation类是如下:
public class Flat101 extends Flat
{
public void bedRoom() {
System.out.println("This flat has a customized bedroom");
}
}
Run Code Online (Sandbox Code Playgroud)
或者,我可以使用interface而不是abstract类来实现相同的目的,如下所示:
class Flat
{
public void livingRoom(){
System.out.println("This flat has a living room");
}
public void kitchen(){
System.out.println("This flat has a kitchen");
}
}
interface BedRoomInterface
{
public abstract void bedRoom();
}
public class Flat101 extends Flat implements BedRoomInterface
{
public void bedRoom() {
System.out.println("This flat has a customized bedroom");
}
}
Run Code Online (Sandbox Code Playgroud)
现在的问题是:为什么应该选择使用interface(或)为什么我应该选择使用abstract类?
这取决于您的意图或用例.但总的来说,你应该更喜欢接口而不是抽象类(Bloch的Effective Java中的第18项).抽象类更脆弱,因为有人可能会修改抽象类来改变从中扩展的其他类的行为(这是一般性陈述).
使用接口更灵活,因为如果你有BedroomInterface和LivingRoomInterface,那么你可以让FlatInterface实现两个接口,然后Flat101实现类实现FlatInterface(而不是从Flat扩展然后实现接口).这看起来更清晰,后来你可以拥有ExecutiveFlatInterface,不仅有卧室和起居室,还有猜测空间,那么Flat102可以实现它.
选项2是让Flat101从Flat延伸,然后Flat实现BedroomInterface和LivingRoomInterface.这实际上取决于您想要做什么以及可能需要哪些方法.
| 归档时间: |
|
| 查看次数: |
8562 次 |
| 最近记录: |