文章目录
- 前言
- 实现多个接口
- 接口间的继承
- 接口使用实例
- 给对象数组排序
- 创建一个比较器
- 总结
前言
实现多个接口
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
这是最核心的两点。
多个接口的使用知识还是比较复杂的,多敲代码会更好理解。