什么时候用接口?什么时候用抽象类?

 

什么时候用抽象类?
如果两个类有共同的方法,但是方法的具体实现又不一样,我们可以把该方法提取出来放在父类里,给父类加上abstract关键字,把父类定义为抽象类。

例如:程序员工作,项目经理也工作,但是程序工作具体内容是写代码,项目经理工作具体内容是管理项目,所以此时可以把工作定义为一个方法提取出来放在抽象类里,
让程序员继承工作方法去写代码,让项目经理也继承工作方法去管理项目。

代码实现:

/**
 *员工类.
*/
public abstract class Employee {
    private  String name;
    private int id;
    private  double salary;
   此处省略set/get方法    
    public abstract void work();
}

/**
 * 程序员类.
 */
public class Programmer  extends Employee{
    @Override
    public void work() {
        System.out.println(getName()+"正在写代码");
    }
}

/**
 *项目经理类
 */
 
public class PM  extends  Employee{

    private int bouns;//奖金
    @Override
    public void work() {
        System.out.println(getName()+"在管理项目");
    }
}

什么时候用接口?
接口只有常量和方法。
常量用public static final 修饰,方法用public abstact 修饰

例子:

/**
 * 飞行类
 */
public interface InterfaceFly {
    public abstract void fly();
}

/**
*鸟类
 */
public class Bird implements InterfaceFly{

    @Override
    public void fly() {
        System.out.println("鸟自由自在的飞");
    }
}

/**
*飞机类
 */
public class airplane implements InterfaceFly{
    @Override
    public void fly() {
        System.out.println("飞机飞到北京去了");
    }
}

总结:

抽象类和其子类是是不是的关系。例如:程序员和项目经理都是员工。
接口和其子类是具不具备、有没有的关系。例如:鸟和飞机都具体飞的特性(鸟和飞机都有飞的特性)

猜你喜欢

转载自www.cnblogs.com/superming/p/12015654.html