Java基础(面向对象三)
接口:
抽象方法本质上时是定义接口规范:规定高层的接口,保证所有子类都能通过相同的接口(方法名)实现,以此发挥多态的优势。
如果一个抽象类没有字段,所有方法都是抽象方法,就可以把该抽象方法定义成接口(interface)。
接口定义的类中不能有字段,接口中定义的所有的方法默认都是public abstract。
当一个class需要继承接口时,使用implements关键字。
一个class可继承多个接口。
一个接口继承另一个接口时用extends。
在继承接口的类中,接口中定义的所有方法都必须被重写,所以一旦修改接口中定义的方法,所有子类都需要修改。
定义default修饰的方法则不需要子类重写(可以重写,但不是必须)。
//主程序 public class Demo { public static void main(String[] args) { /*Person[] arr = { new Student("张晓伟"), new Worker("王楠楠"), new Student1_2("田尔雅") }; for(Person p:arr){ p.run(); p.eat(); System.out.println(p.getName()); }*/ Student1_2 stu = new Student1_2("田尔雅"); stu.eat(); stu.getName(); stu.person1Run(); stu.person2Run(); stu.run(); } } //接口一 interface Person { default void eat(){ System.out.println("eat something"); } void run(); //public abstract String getName(); } //class1 public class Student implements Person { private String name; public Student(String name){ this.name = name; } @Override public void run(){ System.out.println(this.name+".run,一个学生在跑步"); } @Override public String getName(){ return name; } } //class2 public class Worker implements Person { private String name; public Worker(String name){ this.name = name; } @Override public void run(){ System.out.println(this.name+".run,一个工人在跑步"); } @Override public String getName(){ return name; } } //接口1_2 interface Person2 extends Person { void person2Run(); } //接口2 interface Person1 { void person1Run(); }