前言
实现多个接口
Java中不支持多继承,但是一个类可以实现多个接口
下面是自己反复理了很久才敲出来的,涉及到之前学的很多知识点
如果哪看不懂,真的要回顾旧知识,温故而知新是真的不无道理。
没有前面知识的铺垫也学不到这里。
//父类 abstract class Animal { public String name; public int age; public Animal() { } public Animal(String name, int age) { this.name = name; this.age = age; } } //接口 interface IRun{ void run(); } interface IFly{ void fly(); } interface ISwim{ void swim(); } //子类继承父类 //Duck继承Animal 具有跑,飞,游泳的特性 class Duck extends Animal implements IRun,IFly,ISwim { //重写父类构造方法 public Duck(String name, int age) { super(name, age); } //重写接口抽象类方法 @Override public void run() { System.out.println(this.name+"正在用两只脚脚跑"); } @Override public void swim() { System.out.println(this.name+"正在用两只脚脚游泳"); } @Override public void fly() { System.out.println(this.name+"正在用两只翅膀飞"); } } class Frog extends Animal implements IRun,ISwim{ //重写父类构造方法 public Frog(String name, int age) { super(name, age); } //重写接口抽象类方法 @Override public void run() { System.out.println(this.name+"正在用两条腿 跳着跑!"); } @Override public void swim() { System.out.println(this.name+"正在蛙泳!"); } } class Dog extends Animal implements IRun{ //重写父类构造方法 public Dog(String name, int age) { super(name, age); } //重写接口抽象类方法 @Override public void run() { System.out.println(this.name+"正在用两条腿跑!"); } } public class Day{ //调用接口方法 public static void running(IRun iRun){ iRun.run(); } public static void flying(IFly iFly){ iFly.fly(); } public static void swimming(ISwim iSwin){ iSwin.swim(); } public static void main(String[] args) { //实例化 running(new Dog("二狗子",12)); running(new Duck("唐老鸭",18)); running(new Frog("青蛙王子",16)); swimming(new Duck("唐老鸭",18)); swimming(new Frog("青蛙王子",16)); flying(new Duck("唐老鸭",18)); } }
上面的代码是Java 面向对象编程中最常见的用法: 一个类继承一个父类, 同时实现多种接口
接口间的继承
在Java中,类和类之间是单继承的(即子类只能继承一个父类),一个类可以implements多个接口,接口与接口之间可以多继承。
interface A{ void dancing(); } //B接口继承A接口的抽象方法 //所以B接口有两个抽象方法了 interface B extends A { void sing(); } class demo implements B{ //重写B接口的两个抽象方法 @Override public void dancing() { } @Override public void sing() { } }
接口使用实例
给对象数组排序
1.死板的写法
//类实现接口进行比较 class Student implements Comparable<Student>{ public String name; public int age; public Student(String name, int age) { this.name = name; this.age = age; } @Override public String toString() { return "Student{" + "name='" + name + '\'' + ", age=" + age + '}'; } //重写接口方法 @Override public int compareTo(Student o) { if (this. age >o.age){ return 1; } else if (this.age == o.age) { return 0; }else{ return -1; } } } public class Test { public static void main(String[] args) { Student student = new Student("huahau",12); Student student2 = new Student("liangliang",6); System.out.println(student.compareTo(student2)); } }
2.灵活的写法
创建一个比较器
class Student implements Comparable<Student>{ public String name; public int age; public Student(String name, int age) { this.name = name; this.age = age; } //重写接口方法 @Override public int compareTo(Student o) { return 0; } } //年龄比较器Comparator<> class AgeeComparator implements Comparator<Student>{ @Override public int compare(Student o1, Student o2) { return o1.age- o2.age; //o1大于o2返回正数,o1小于o2返回负数 } } //姓名比较器Comparator<> class NameComparator implements Comparator<Student>{ @Override public int compare(Student o1, Student o2) { return o1.name.compareTo(o2.name); //姓名不能直接点出来,要点重写的方法 } } public class Test { public static void main(String[] args) { Student student1 = new Student("huahua",12); Student student2 = new Student("liangliang",6); //需要比较年龄,调用比较器就行,比较灵活方便 AgeeComparator ageeComparator = new AgeeComparator(); System.out.println(ageeComparator.compare(student1, student2)); //需要比较姓名,调用比较器就行,比较灵活方便 NameComparator nameComparator = new NameComparator(); System.out.println(nameComparator.compare(student1, student2)); } }
总结
类实现多个接口:class 子类 extends 父类 implements 接口
接口与接口之间可以多继承:interface B extends A
这是最核心的两点。
多个接口的使用知识还是比较复杂的,多敲代码会更好理解。