什么时候用接口?什么时候用抽象类?
什么时候用抽象类?
如果两个类有共同的方法,但是方法的具体实现又不一样,我们可以把该方法提取出来放在父类里,给父类加上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("飞机飞到北京去了");
}
}
总结:
抽象类和其子类是是不是的关系。例如:程序员和项目经理都是员工。
接口和其子类是具不具备、有没有的关系。例如:鸟和飞机都具体飞的特性(鸟和飞机都有飞的特性)