接口的特点!!!!
-
接口不能创建对象
-
接口的变量使用public static final修饰,如果不写默认添加;
-
接口的方法为public abstrict,如果不写默认添加;
-
子类必须重写接口中所有的抽象方法后,才能创建对象;
-
如果子类不能够重写所有的抽象方法,子类必须定义成抽象类;
接口和抽象类的区别!!!!!
- 相同点
- 都是位于继承的顶端,用于被其他类继承;
- 都不能直接实例化对象;
- 都包含了抽象方法,其他子类都必须覆写这些抽象方法;
- 区别
- 抽象类可以定义非抽象方法,避免子类重复实现这些方法,提高代码的复用性,接口只能包含抽象方法;
- 一个类只能继承一个直接父类,却可以实现多个接口。(接口弥补了Java的单继承)
- 类与类之间只能是单继承,接口与接口之间可以是多实现;
- 抽象类可以定义普通的成员变量,接口只能定义 public static final 的成员变量;
练习题:
定义一个类是员工,员工有id和name属性,有一个方法是eat调用eat所有员工输出吃饭,有一个抽象方法是work,不同的员工工作的内容不同,定义3个类,程序员,老师,网管,分别调用work的时候”id为xx的name写代码”,”讲课”,”拉网线”。public abstract class Employee { private int id; private String name; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public void eat() { System.out.println("该吃饭"); } public abstract void work(); } class programmer extends Employee { @Override public void work() { System.out.println("id : " + getId() + " 的 " + getName() + "写代码"); } } class Teacher extends Employee { @Override public void work() { System.out.println("id : " + getId() + " 的 " + getName() + "讲课"); } } class Managert extends Employee { @Override public void work() { System.out.println("id : " + getId() + " 的 " + getName() + "拉网线"); } } class Test { public static void main(String[] args) { programmer pro = new programmer(); pro.setId(001); pro.setName("zxh" ); pro.work(); pro.eat(); } }