接口

文章目录

1.接口的概念

  • 接口是抽象类的更近一步(比抽象类还抽象)
  • 抽象类只是不能实例化,但是其他的各个方面都和普通的类差不多。
  • 接口就更抽象了,不仅不能实例化,同时也不具备类的各种特性。
  • 接口中也可以放抽象方法,这里的抽象方法不必写abstract关键字(写或者不写都是抽象方法),不能放普通方法,只能放抽像方法。
  • 虽然draw没写public和abstract,但是也表示是一个抽象的公有的方法。
  • 接口中也不能放普通的属性,只能放public static final修饰的属性。
  • 接口不能继承自其他的类,但是可以继承自其他的接口。
  • 接口不能被类继承,而是被其他的类"实现"
  • 某个类实现了这个接口
  • 抽象类和接口的区别
  1. 抽象类和普通的类差不多,只是不能被实例化,而接口和普通的类相差甚远(包含属性,方法,和其他类的关系)
  2. 一个类只能继承自一个抽象类,但是一个类可以同时实现多个接口。(接口的实现就是为了 解决Java中不能多继承的问题,Java的继承是单继承,但是有些场景中多继承是有用的,Java中可以通过继承一个类,实现多个接口的方式来完成类似于多继承的效果)。
//Shape类
public interface  Shape{
     //这个代码看起来是一个普通的属性,其实不是
    int num = 10;
    public static final int n = 10;
     //虽然draw没写public和abstract,但是也表示是一个抽象的公有的方法
    void draw();
}

//Rect类
public class Rect implements Shape {
    @Override
    public void draw(){
        System.out.println("□");
    }
}

  • 接口中不包含实例属性。
  • 接口存在的意义:
  • 既能够实现类似于多继承的效果,同时又能规避多继承带来的问题。
  • 接口相当于是一种约束,要求实现该接口的类,必须重写所有接口中的抽象方法。
  • 接口是一个非常有用的语法机制,如果所有的代码都是一个人完成的,此时接口的意义就不大了,如果这个代码需要很多人协同开发完成的,此时接口就非常具有意义。
//Animal类
 abstract public class Animal {
   protected String name;

   public Animal(String name){
      this.name=name;
   }
}

//IRunning接口
//接口的命名,一般会使用I作为前缀
//接口在命名的时候,一般使用形容磁性的单词来进行命名
//接口表示的语义,一个类有XXX特性
public interface IRunning {
    void run();
}

//Cat类
public class Cat extends Animal  implements  IRunning{

    public Cat(String name){
        super(name);
    }

    @Override
    public void run(){
        System.out.println(name+"四条腿在跑");
    }
}

public interface ISwimming {
    void swim();
}

public interface IFlying {
    void fly();
}


//Bird类
public class Bird extends Animal implements IRunning {

    public Bird(String name) {
        super(name);
    }

    @Override
    public void run(){
        System.out.println(name+"一跳一跳的跑");
    }
}

//IAmphibious接口
public interface IAmphibious  extends IRunning,ISwimming {
    //此时该接口就同时包含了IRunning中的抽象方法
    //同时也包含了ISwimming的方法
}

//Frog类
public class Frog extends Animal implements IAmphibious {

    public Frog(String name) {
        super(name);
    }

    @Override
    public void run() {

    }

    @Override
    public void swim() {

    }
}


//Duck类
public class Duck extends Animal implements IRunning,IFlying,ISwimming  {

    public Duck(String name) {
        super(name);
    }

    @Override
    public void fly() {
        System.out.println(name+"正在飞");
    }

    @Override
    public void run() {
        System.out.println(name+"一摇一摆的跑");
    }

    @Override
    public void swim() {
        System.out.println(name+"两条腿在游泳");
    }
}

  • 一个类可以实现多组接口,表示不同的约束条件,每个接口里面又可以有多个抽象的方法。
  • 实现多个接口需要接口之间用逗号隔开。
  • 接口和接口之间是可以继承的(说是继承,表述成组合合理)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值