接口的应用

接口的应用

目录

接口

一. 接口相当于特殊的抽象类,定义方式,组成部分于抽象类类似,,没有构造方法,不能创造对象

二.与抽象类的异同

三.什么是接口?

四:接口的规范

五:接口引用

同父类一样,接口也可声明引用,并指向实现类对象

六:接口的多态

七.接口的常见关系

七.宏观接口

八:接口的回调

九.接口的向下转型


 

一. 接口相当于特殊的抽象类,定义方式,组成部分于抽象类类似,,没有构造方法,不能创造对象

组成:使用Interface关键字定义接口,用implements实现接口类

只能定义:公开静态常量,公开抽象方法

package inter;
​
public interface MyInterface01 {
    public static void main(String[] args) {
        System.out.println(MyInterface01.A);
        System.out.println(MyInterface01.SD);
        
    }
    //公开静态常量
    public static  final String A="yao";
    String  SD="jack";//隐式存在
    //公开抽象方法
public abstract  void method();
public void m2();//隐式存在
}

 

二.与抽象类的异同

相同:

  • 可编译成字节码文件

  • 不能创建对象

  • 可以作为引用类型

  • 具备obJect类中所定义的方法

不同

  • 所有属性都是公开静态常量,隐式使用public static final修饰

  • 所有方法都是公开抽象方法,隐式使用public abstract修饰

  • 没有构造方法,动态代码块,静态代码块

三.什么是接口?

微观概念:接口是一种能力和定约定

  • 接口的定义:代表了某种能力

  • 方法的定义:能力的具体要求

经验:Java为单继承,当父类的方法种类无法满足子类需求时,可实现接口,扩充子类能力,接口支持多实现,可为类扩展多种能力.

四:接口的规范

  • 任何类实现接口时,必须实现接口中所有的抽象方法,否则为抽象类

  • 接口的访问权限必须是Public

五:接口引用

  • 同父类一样,接口也可声明引用,并指向实现类对象

  • 接口中的多态关注行为,关注方法,不关注类型

  • 只能调用接口中所声明的方法,不可调用实现类中独有方法

  • 可强转回实现类本身,进行独有方法覅用

package inter;
//定义一种能力,会跑的
public interface Runnable {
    public  abstract  void run();
}
//定义一种能力,会爬
    interface  Climbable {
    public void climb();
}
//会飞
interface  flyable{
    public  void fly();
}
package inter;
​
public class TestInterface {
    public static void main(String[] args) {
        Animal animal = new Dog();//父类引用指向子类对象  (父类的多态)关注类型
        //接口引用指向实现类对象,只可调用接口中所声明的方法   (接口中的多态)关注行为
        Runnable r = new Dog();//指向跑的方法
        r.run();
    }
}
class Animal implements Runnable,Climbable{
    String name;
    int age;
public void eat(){}
public void sleep(){}
​
    @Override
    public void run() {
        System.out.println("动物行走的能力");
    }
​
    @Override
    public void climb() {
       System.out.println("动物爬行的能力");
    }
}
class Cat extends  Animal implements  flyable{
    String Brand;
​
    @Override
    public void fly() {
        System.out.println("猫在飞");
    }
}
class Fish extends  Animal{
    public void swin(){}
}
class  Dog extends  Animal{
    public void run(){}
}
​
​
 

六:接口的多态

  • 不再关注往具体的类型,而是关注行为

  • 不同引用类型,仅可调用自身类型中所声明的方法

 

package inter;
​
public class TestInterface {
    public static void main(String[] args) {
        Dog dog = new Dog();//狗当成狗
        Animal animal = new Dog();//父类引用指向子类对象  (父类的多态)关注类型,只能调父类的方法
        //接口引用指向实现类对象,只可调用接口中所声明的方法   (接口中的多态)关注行为
        Runnable r = new Dog();//指向跑的方法 ,将狗看成会跑的东西,只能调父类接口的方法
        r.run();
        flyable f =new Cat();//将猫当成会飞的东西
        f.fly();
    }
}
class Animal implements Runnable,Climbable{
    String name;
    int age;
public void eat(){}//父类的方法
public void sleep(){}//父类的方法
​
    @Override
    public void run() {//接口的方法
        System.out.println("动物行走的能力");
    }
​
    @Override
    public void climb() {//接口的方法
       System.out.println("动物爬行的能力");
    }
}
class Cat extends  Animal implements  flyable{
    String Brand;
​
    @Override
    public void fly() {//接口的方法
        System.out.println("猫在飞");
    }
}
class Fish extends  Animal{
    public void swin(){}//父类的方法
}
class  Dog extends  Animal{
    public void run(){}//父类的方法
}

七.接口的常见关系

  • 类与类

  • 单继承

  • extends 父类名称

  • 类与接口

  • 多实现

  • implements 接口名称1,接口名称2,接口名

  • 接口与接口

  • 多继承

  • extends 父接口,父接口,父接口n

package inter;
​
public class DuoJiCheng {
    public static void main(String[] args) {
​
    }
}
interface  A{
    void m1();
}
interface  B{
    void  m2();
}
interface  C{
    void  m3();
}
//类与接口之间的关系
class  MyClass implements A,B,C{
​
    @Override
    public void m1() {
​
    }
​
    @Override
    public void m2() {
​
    }
​
    @Override
    public void m3() {
​
    }
    interface  C extends A,B{//接口代表能力,无关于类型,不用重写方法
        void m3();
    }
}

常量接口:将多个常用于表示状态或固定值的变量,以静态常量的形式定义在接口中管理,提高代码可读性

package inter;

public class ChangLiangjie implements  ChangLiang {
​
   public static void main(String[] args) {
       //猜拳(1.剪刀 2.石头 3 布)
       //交通灯(1.红灯 2.黄灯 3绿灯)
​
​
       //状态
       int lightState=RED;//红灯
       //判断
       if (lightState == 1) {
           lightState =GREEN;
       }else if (lightState == 2) {
           lightState =RED;
       }else{
           lightState=YELLOW;
       }
       System.out.println(lightState);
   }
}
interface  ChangLiang{
   public static    final     int RED=1;
   public  static final   int YELLOW=2;
   public    static final    int GREEN =3;
}

七.宏观接口

概念:接口是一种标准.

耦合度:模块与模块之间的关联程度,关联越密切,耦合度越高,关联越松散,耦合越低.

八:接口的回调

接口回调:现有接口的使用者,后有接口的实现者

package inter;
​
/**
* 接口标准
* 只有执行此接口的对象才可以排序
* 接口
*/
​
/**
* 比较方法
* this与传入的students对象进行比较
* @param <T>另一个传入对象
*   retudents
*           负数:this 靠前,stu靠后
*           正数:this靠后,stu靠前
*           0:不变
*/
public interface Compare<T> {
   public int compareTo(T students);//Student students
}
​
package inter;
​
/**
* 可以帮助任何类型的一组对象进行排序
* 接口使用者(工具)
*/
public class Sort {
   public static void sort(Studernt[] studernts){
       for (int i = 0; i <studernts.length ; i++) {
    Comparable currentStu= (Comparable)studernts[i];
           int n=currentStu.compareTo(studernts[1+1]);//正数靠后
           if (n >0) {
               //俩值交换
               Studernt temp =studernts[0];
               studernts[0]=studernts[1];
               studernts[1]=temp;
           }
       }
   }
}
​
package inter;
​
/**
* 接口回调
*/
public class HuiDIao {
   public static void main(String[] args) {
       //对学生对象排序
       Studernt[] students =new Studernt[]{
               new Studernt("ton",22,"男",99),
               new Studernt("kack",20,"男",98),
               new Studernt("her",25,"男",97),
               new Studernt("jay",21,"男",96),
       };
//java.util.Arrays.sort(studernts);
       //students[0].compareTo(students[1]);//编辑哦成绩,返回一个正数
       //接口的调用者
       Sort.sort(students);
​
       for (int i = 0; i <students.length ; i++) {
           System.out.println(students[i].name+"\t"+students[i].score);
       }
   }
}
//对学生对象排序
//接口实现者
class  Studernt implements  Comparable<Studernt>{
   String name;
   int age;
   String sex;
   double score;
​
   public Studernt() {
   }
​
   public Studernt(String name, int age, String sex, double score) {
       this.name = name;
       this.age = age;
       this.sex = sex;
       this.score = score;
   }
​
​
   @Override
   public int compareTo(Studernt studernt) {
       if (this.score>studernt.score) {
           return 1;
       }else  if(this.score<studernt.score){
           return  -1;
       }
       return 0;
   }
}
/**
*ton    99.0
kack    98.0
her 97.0
jay 96.0
​
*
*/
package inter;
​
public class TestStu {
   public static void main(String[] args) {
//要求:老师对象升序排序
       Teacher[] teachers =new Teacher[]{
               new Teacher("ton",22),
               new Teacher("kack",20),
               new Teacher("her",30),
               new Teacher("jay",21),
       };
       java.util.Arrays.sort(teachers);//调用工具
​
       for (int i = 0; i <teachers.length ; i++) {
           System.out.println(teachers[i].name+"\t"+teachers[i].age);
       }
   }
}
class Teacher implements  Comparable<Teacher>{
   String name;
int age;
​
   public Teacher() {
   }
​
   public Teacher(String name, int age) {
       this.name = name;
       this.age = age;
   }
​
   @Override
   public int compareTo(Teacher o) {
       if(this.age>o.age){
           return  1;
       }else if(this.age<o.age){
           return  -1;
       }
       return 0;
   }
}

九.接口的向下转型

package Interface.lianxi03;
​
interface  A{
    void moA();
}
interface B extends  A{
    void B();
}
interface  C {
 void C();
}
interface  D extends  B,C{
    void D();
​
}
class E implements  D{
​
​
    @Override
    public void moA() {
        System.out.println("A的实现方法");
    }
​
    @Override
    public void B() {
        System.out.println("B的实现方法");
    }
​
    @Override
    public void C() {
        System.out.println("C的实现方法");
    }
​
    @Override
    public void D() {
        System.out.println("D的实现方法");
    }
}
public class TestInterface {
    public static void main(String[] args) {
    A a = new E();
        B b = new E();
        C c = new E();
        D d = new E();
        //向下转型
        if (a instanceof E) {
            E e = (E) a;
            e.moA();
        } else if (b instanceof E) {
            E e = (E) b;
            e.B();
        } else if (c instanceof E) {
            E e = (E) c;
            e.C();
        } else if (d instanceof E){
            E e = (E) d;
            e.D();
        }else {
            System.out.println("转型失败");
        }
        System.out.println(c instanceof A);
        System.out.println(c instanceof B);
        System.out.println(c instanceof C);
        System.out.println(c instanceof D);
        System.out.println(c instanceof E);
    }
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值