JAVA基础--Day05

1.接口的语法

  • 接口是一种引用数据类型,可以定义引用类型变量,由 interface 声明
  • 接口中只能定义常量和抽象方法
  • 可以省略常量的修饰词 public static final
  • 可以省略抽象方法修饰符 public abstract
  • 在 JDK1.8之后接口中可以定义非抽象的有方法实现的方法,但是需要使用 default 关键字声明

Java
public interface Inter {
     void  print();
    default  void  test(){} //默认方法
    static  void print(){} //静态方法
}

  • 接口不能实例化创建对象,可以作为父类型被子类实现(继承)
  • 接口用于定义多个类的共同行为和规范,需要被子类实现,通过 implements 关键字实现接口
  • 一个类可以实现多个接口,用逗号分隔
  • 子类实现接口时必须重写接口中的全部抽象方法

2.抽取规则

在 Java 编程语言中接口是一个抽象类型,这样就会带来一个矛盾,抽象类也是抽象的,接口也是抽象的,区别在哪里?

  • 统一种类的公共行为和属性可以抽取到抽象类
  • 如果所有子类的行为都一样,设计为普通方法
  • 如果所有子类的行为不一样,设计为抽象方法
  • 不同种类的公共行为抽取到接口中
  • 接口是对继承的单根性的扩展----实现多继承
  • 符合既是也是的原则
  • 例如:
  • 鸟 Bird
  • 飞行方法,觅食方法
  • 狗 Dog
  • 爬行方法,觅食方法
  • 老虎 Tiger
  • 跑方法,觅食方法
  • 青蛙 Frog
  • 跳方法,觅食方法
  • 以上子类都有觅食方法,根据java 继承的抽取归纳原则,将所有子类所共有的方法抽取到父类,又由于每个子类的实现不同,所以将父类中的方法定义为抽象方法
  • 父类 Animal 类

Java
public abstract class Animal{
    public abstract void food();
}

  • 而飞行这些都是部分子类所具备的行为,所以定义为接口,让拥有这个能力的子类去实现

Java
interface Swim{
    void swim();
}
interface crawl{
    void crawl();
}

3.接口的多继承

Java 不支持“类的多继承”,也就是一个 Java 类不能继承多个父类,但是 Java 支持一个类继承一个父类实现多个接口,Java 利用这种方式实现了多继承:Java 利用接口实现了多继承

一个接口可以同时继承多个接口,中间用逗号隔开

Java
public interface Inter extends Inter1,Inter2{
    default  void  test(){} //默认方法
    static  void print(){} //静态方法
}

interface Inter1{}

interface  Inter2{}

4.接口的多实现

接口不允许实例化对象,接口需要被类实现,一个类可以同时实现多个接口

  • 注意:
  • 在一个类既有继承,又有实现的时候,是先继承后实现
  • 类和类之间是继承关系----单继承
  • 接口和接口之间也是继承关系----多继承
  • 类和接口之间是实现关系----多实现
  • 例如:
  • 定义动物抽象类,声明所有动物所具备的行为,例如觅食行为
  • 爬行和游泳是部分动物所具备的行为,分别定义两个接口,让具体此行为的动物来实现
  • 定义子类青蛙类
  • Animal 类

Java
abstract class Animal{
    public abstract void food(); //所有子类共有的
}

  • 爬行接口 Crawl,游泳接口 Swim

Java
interface Swim{  //游泳接口
    void swim();
}
interface crawl{  //爬行接口
    void crawl();
}

  • 青蛙类 frog,青蛙即是动物又会爬行还会游泳,所以需要继承动物类,并实现游泳接口和爬行接口

Java
class Frog extends Animal implements Swim,crawl{

    @Override
    public void food() {
        System.out.println("青蛙吃虫子");
    }

    @Override
    public void swim() {
        System.out.println("青蛙会游泳");
    }

    @Override
    public void crawl() {
        System.out.println("青蛙会爬行");
    }
}

  • 当既有继承又有实现的时候,类先继承一个类,再实现接口

线程:小球滚动和星星落幕

小球滚动:

 

 

 

 星星落幕:

 

 

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值