关于java:何时使用抽象类以及何时使用接口

When to use abstract classes and when to use interfaces

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
When to use interfaces or abstract classes? When to use both?

考虑这个

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
public abstract class Flat
{
    //some properties


    public void livingRoom(){
       //some code
    }

    public void kitchen(){
       //some code
    }

    public abstract void bedRoom();

}
An implementation class would be as follows:

public class Flat101 extends Flat
{
        public void bedRoom() {
            System.out.println("This flat has a customized bedroom");
       }        

}

或者,我可以使用接口而不是抽象类来实现以下相同的目的:

1
2
3
4
5
6
7
8
9
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");
 }

}

1
2
3
4
5
6
7
8
9
10
11
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");
       }
}

现在的问题是:对于这个设置,为什么要选择使用接口(或)为什么要选择使用抽象类?


一般来说,当您需要一个地方来放置可以在实现之间重用的公共逻辑时,可以使用abstract类。否则,使用Interface

还有一些例外,通常与设计模式密切相关。但保持简单。