当前位置: 首页 > article >正文

面向对象-接口的使用

1. 接口的概述

为什么有接口?

借口是一种规则,对于继承而言,部分子类之间有共同的方法,为了约束方法的使用,使用接口。

接口的应用: 接口不是一类事物,它是对行为的抽象。

2. 接口的定义和使用

接口用关键字interface来定义

        public interface 接口名{}

接口不能实例化

接口和类之间是实现关系,通过implements关键字表示

        public class 类名 implements 接口名{}

接口的子类(实现类)

        要么重写接口中的所有抽象方法

        要么是抽象类

注意1:接口和类的实现关系,可以单实现,也可以多实现。

public class 类名 implements 接口名1,接口名2{}

注意2:实现类还可以在继承一个类的同时实现多个接口

public class 类名 extends 父类 implements 接口名1,接口名2{}

练习:

 

父类:
package oopinterface.demo1;

public abstract class Animal {
    private String name;
    private int age;

    public Animal() {
    }

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

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
    public abstract void eat();
}

 

游泳接口:
package oopinterface.demo1;

public interface Swim {
    public abstract void swim();
}
兔子类:
package oopinterface.demo1;

public class Rabbit extends Animal {
    public Rabbit() {
    }

    public Rabbit(String name, int age) {
        super(name, age);
    }

    @Override
    public void eat() {
        System.out.println("兔子在吃胡萝卜");
    }
}
青蛙类:
package oopinterface.demo1;

public class Frog extends Animal implements Swim {
    public Frog() {
    }

    public Frog(String name, int age) {
        super(name, age);
    }

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

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

    }
}
狗类:
package oopinterface.demo1;

public class Dog extends Animal implements Swim{
    public Dog() {
    }

    public Dog(String name, int age) {
        super(name, age);
    }

    @Override
    public void eat() {
        System.out.println("狗吃骨头");
    }

    @Override
    public void swim() {
        System.out.println("狗在狗刨");

    }
}
测试类:
package oopinterface.demo1;

public class Test {
    public static void main(String[] args) {
        Dog d = new Dog("小黄",2000);
        System.out.println(d.getName() +", " + d.getAge());
        d.eat();
        d.swim();

    }
}

 

3. 接口中成员的特点

成员变量: 只能是常量

默认修饰符:public static final

构造方法:没有

成员方法:只能是抽象方法

默认修饰符:public abstract

JDK7以前:接口中只能定义抽象方法。

JDK8的新特性:接口中可以定义有方法体的方法

JDK9的新特性:接口中可以定义私有方法

4. 接口和类之间的关系

类和类的关系: 继承关系,只能单继承,不能多继承,但是可以多层继承

类和接口的关系

实现关系,可以单实现,也可以多实现,还可以在继承一个类的同时实现多个接口。

接口和接口之间的关系

继承关系,可以单继承,也可以多继承

如果实现类实现了下面的子接口(继承的子类),那么就需要重写所有的抽象方法(包含父类和子类的抽象方法)。

5. 接口和抽象类的综合案例

 

画图:从下往上

写代码:从上往下

父类:人

 

package oopinterface.demo2;
//由于父类的子类全部为抽象类,现在创建父类对象没有意义,所以将父类也设置成抽象类
public abstract class Person {
    private String name;
    private int age;

    public Person() {
    }

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}
运动员:
package oopinterface.demo2;

public abstract class Sportsman extends Person {
    public Sportsman() {
    }

    public Sportsman(String name, int age) {
        super(name, age);
    }

    public abstract void study();
}
教练:
package oopinterface.demo2;

public abstract class Coach extends Person {
    public Coach() {
    }

    public Coach(String name, int age) {
        super(name, age);
    }

    public abstract void teach();
}
说英语接口:
package oopinterface.demo2;

public interface English {
    public abstract void speakEnglish();
}
乒乓球运动员:
package oopinterface.demo2;

public  class PpSportsman extends Sportsman implements English{
    public PpSportsman() {
    }

    public PpSportsman(String name, int age) {
        super(name, age);
    }

    @Override
    public void speakEnglish() {
        System.out.println("乒乓球运动员在说英语");
    }

    @Override
    public void study() {
        System.out.println("乒乓球运动员在练习打乒乓球");
    }
}
篮球运动员:
package oopinterface.demo2;

public class BasketballSportsman extends Sportsman {
    public BasketballSportsman() {
    }

    public BasketballSportsman(String name, int age) {
        super(name, age);
    }

    @Override
    public void study() {
        System.out.println("篮球运动员在学习打篮球。");
    }
}
篮球教练:
package oopinterface.demo2;

public class BaskateballCoach extends Coach {
    public BaskateballCoach() {
    }

    public BaskateballCoach(String name, int age) {
        super(name, age);
    }

    @Override
    public void teach() {
        System.out.println("篮球教练正在教打篮球。");
    }
}
乒乓球教练:
package oopinterface.demo2;

public class PpCoach extends Coach implements English{
    public PpCoach() {
    }

    public PpCoach(String name, int age) {
        super(name, age);
    }

    @Override
    public void teach() {
        System.out.println("乒乓球教练在教打乒乓球。");
    }

    @Override
    public void speakEnglish() {
        System.out.println("乒乓球教练在学习说英语。");
    }
}
测试类;
package oopinterface.demo2;

public class Test {
    public static void main(String[] args) {
        PpSportsman pps = new PpSportsman("ml",24);
        System.out.println(pps.getName() + "," + pps.getAge());
        pps.speakEnglish();
        pps.study();
    }
}

http://www.kler.cn/a/405715.html

相关文章:

  • 智能安全配电装置在高校实验室中的应用
  • 远程管理不再难!树莓派5安装Raspberry Pi OS并实现使用VNC异地连接
  • docker安装zabbix +grafana
  • C++:类和对象(三)
  • Linux-服务器辨别实体机OR虚拟机
  • 快速排序-java版本
  • Spring框架特性及包下载(Java EE 学习笔记04)
  • SpringBoot与knife4j的整合使用
  • Spark RDD 的宽依赖和窄依赖
  • 2024年亚太数学建模竞赛问题C宠物产业及相关产业发展分析与对策
  • CEF127编译指南 Windows篇-安装Git和Python(三)
  • C语言深度剖析:定义与声明
  • Go-RPC关键指标分析与企业实践
  • Unity 编辑器下 Android 平台 Addressable 加载模型粉红色,类似材质丢失
  • 金融量化交易模型的突破与前景分析
  • PostGIS创建空间数据库步骤
  • .net6 使用 FreeSpire.XLS 实现 excel 转 pdf - docker 部署
  • 中国省级新质生产力发展指数数据(任宇新版本)2010-2023年
  • 单词的分类(二)冠词和数词
  • ANSYS HFSS仿真回流路径与跨分割布线
  • Go语言使用 kafka-go 消费 Kafka 消息教程
  • QA|使用 MapleSim 模拟卷料生产 (Converting)和卷对卷系统 (R2R)
  • Paper -- 洪水深度估计 -- 基于计算机视觉, 根据被淹车辆图像进行洪水深度估计
  • nginx 配置lua执行shell脚本
  • Linux ASLR
  • 【数据结构】—— 树