• Java—接口


    目录

    1.接口

    1.1接口概述

    1.2接口的特点

    1.3接口的成员特点

    案例:猫和狗

    1.4类和接口的关系

    1.5抽象类和接口的区别

    案例:运动员和教练


    1.接口

    1.1接口概述

    接口就是一种公共的规范标准,只要符合规范标准,大家都可以通用

    Java中的接口更多的体现在对行为的抽象

    1.2接口的特点

    接口用关键字interface修饰
            public interface接口名{}

    类实现接口用implements表示
            public class类名implements接口名{}

    接口不能实例化
            接口如何实例化呢?参照多态的方式,通过实现类对象实例化,这叫接口多态。

            多态的形式:具体类多态,抽象类多态,接口多态
            多态的前提:有继承或者实现关系;有方法重写;有父(类/接口)引用指向(子/实现)类对象

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

            要么是抽象类

    接口:

    1. package zyy03;
    2. /*定义了一个接口*/
    3. public interface Jump {
    4. public abstract void Jumpping();
    5. }

    猫类(接口的实现类):

    1. package zyy03;
    2. public class Cat implements Jump{
    3. @Override
    4. public void Jumpping() {
    5. System.out.println("猫可以跳高");
    6. }
    7. }

    测试类:

    1. package zyy03;
    2. public class Demo {
    3. public static void main(String[] args) {
    4. //Jump j=new Jump();//接口是对行为的抽象,所以和抽象类一样不能实例化
    5. Jump j=new Cat();//用实现类对象进行实例化
    6. j.Jumpping();
    7. }
    8. }

    1.3接口的成员特点

    成员变量
            只能是常量
            默认修饰符:public static final

    构造方法
            接口没有构造方法,因为接口主要是对行为进行抽象的,是没有具体存在
            一个类如果没有父类,默认继承自Object类

    成员方法
            只能是抽象方法
            默认修饰符:public abstract

    案例:猫和狗

    需求:对猫和狗进行训练,他们就可以跳高了,这里加入了跳高功能。请采用抽象类和接口来实现猫狗案例,       并在测试类中进行测试

    思路:
    定义接口(Jumpping)
            成员方法:跳高();

    定义抽象动物类(Animal)
            成员变量:姓名,年龄:

            构造方法:无参,带参:

            成员方法:aet/set方法,

            吃饭{}

    定义具体猫类(Cat),继承动物类,实现跳高接口
            构造方法:无参,带参;

            成员方法:重写吃饭(){..},重写跳高方法(){...}

    定义狗类(Dog),继承动物类,实现跳高接口
            构造方法:无参,带参;

            成员方法:重写吃饭(){….},重写跳高方法(){...)

    定义测试类(AnimalDemo),写代码测试5

     接口:

    1. package zyy03;
    2. /*定义了一个接口*/
    3. public interface Jump {
    4. void Jumpping();
    5. }

    抽象动物类:

    1. package zyy03;
    2. public abstract class Animal {
    3. private String name;
    4. private int age;
    5. public Animal() {
    6. }
    7. public Animal(String name, int age) {
    8. this.name = name;
    9. this.age = age;
    10. }
    11. public String getName() {
    12. return name;
    13. }
    14. public void setName(String name) {
    15. this.name = name;
    16. }
    17. public int getAge() {
    18. return age;
    19. }
    20. public void setAge(int age) {
    21. this.age = age;
    22. }
    23. public abstract void eat();
    24. }

    猫类:

    1. package zyy03;
    2. public class Cat extends Animal implements Jump{
    3. @Override
    4. public void eat() {
    5. System.out.println("猫吃鱼");
    6. }
    7. @Override
    8. public void Jumpping() {
    9. System.out.println("猫可以跳高");
    10. }
    11. public Cat() {
    12. }
    13. public Cat(String name, int age) {
    14. super(name, age);
    15. }
    16. }

    狗类:

    1. package zyy03;
    2. public class Dog extends Animal implements Jump{
    3. @Override
    4. public void eat() {
    5. System.out.println("狗吃骨头");
    6. }
    7. @Override
    8. public void Jumpping() {
    9. System.out.println("狗可以跳高");
    10. }
    11. public Dog() {
    12. }
    13. public Dog(String name, int age) {
    14. super(name, age);
    15. }
    16. }

    测试类:

    1. package zyy03;
    2. public class Demo {
    3. public static void main(String[] args) {
    4. //Jump j=new Jump();//接口是对行为的抽象,所以和抽象类一样不能实例化
    5. Jump j=new Cat();//用实现类对象进行实例化
    6. j.Jumpping();
    7. Animal a=new Cat();
    8. a.setName("zyy");
    9. a.setAge(14);
    10. System.out.println(a.getName()+","+a.getAge());
    11. a.eat();
    12. //a.Jumpping;
    13. System.out.println("************");
    14. Jump j1=new Dog();//用实现类对象进行实例化
    15. j.Jumpping();
    16. Animal b=new Dog();
    17. b.setName("jw");
    18. b.setAge(18);
    19. System.out.println(b.getName()+","+b.getAge());
    20. b.eat();
    21. //b.Jumpping;
    22. }
    23. }

    1.4类和接口的关系

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

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

    接口和接口的关系
            继承关系,可以单继承,也可以多继承

    1.5抽象类和接口的区别

    成员区别
            抽象类:         变量,常量;有构造方法;有抽象方法,也有非抽象方法 
            接口:             常量;抽象方法 

    关系区别
            类与类 :            继承,单继承 
            类与接口:         实现,可以单实现,也可以多实现 
            接口与接口:     继承,单继承,多继承 

    设计理念区别
            抽象类 :        对类抽象,包括属性、行为 
            接口  :          对行为抽象,主要是行为

    🔺抽象类是对事物的抽象,而接口是对行为的抽象

    案例:运动员和教练

    需求:我们现在有乒乓球运动员和篮球运动员,乒乓球教练和篮球教练。为了出国交流,跟乒乓球相关的人员都需要学习英语,请用所学知识分析,这个室例中有哪些具体类,哪些抽象类,哪些接口,并用代码实现

    分析:从具体到抽象
    乒乓球运动员

    篮球运动员

    乒乓球教练

    篮球教练

    实现:从抽象到具体

    使用:使用的是具体的类的对象

    思路:

    ①定义说英语接口         成员方法:说英语; 
    ②定义抽象人类      成员变量:姓名,年龄:构造方法:无参,带参:成员方法:get/set方法,吃饭; 
    ③定义抽象教练类,继承人类         构造方法:无参,带参;成员方法:教0; 
    ④定义抽象运动员类,继承人类         构造方法:无参,带参;成员方法:学习0; 
    ⑤ 定义具体篮球教练类,继承教练类         构造方法:无参,带参:成员方法:重写吃饭,重写教
    ⑥定义具体乒乓球教练类,继承教练类,实现说英语接口
            构造方法:无参,带参;        成员方法:重写吃饭,重写教,重写说英语
    ⑦定义具体篮球运动员类,继承运动员类        

            构造方法:无参,带参;

            成员方法:重写吃饭,重写学习

    ⑧定义具体乒乓球运动员类,继承运动员类,实现说英语接口
            构造方法:无参,带参

            成员方法:重写吃饭,重写学习,重写说英语
    ⑨ 定义测试类,写代码测试

      接口:

    1. package zyy05;
    2. public interface Inter {
    3. void English();
    4. }

    抽象运动员:

    1. package zyy05;
    2. public abstract class Athlete extends Person{
    3. public Athlete() {
    4. }
    5. public Athlete(String name, int age) {
    6. super(name, age);
    7. }
    8. public abstract void study();
    9. }

    抽象类教练:

    1. package zyy05;
    2. public abstract class Coach extends Person {
    3. public Coach() {
    4. }
    5. public Coach(String name, int age) {
    6. super(name, age);
    7. }
    8. public abstract void teach();
    9. }

    抽象类人:

    1. package zyy05;
    2. public abstract class Person {
    3. private String name;
    4. private int age;
    5. public abstract void eat();
    6. public Person() {
    7. }
    8. public Person(String name, int age) {
    9. this.name = name;
    10. this.age = age;
    11. }
    12. public String getName() {
    13. return name;
    14. }
    15. public void setName(String name) {
    16. this.name = name;
    17. }
    18. public int getAge() {
    19. return age;
    20. }
    21. public void setAge(int age) {
    22. this.age = age;
    23. }
    24. }

    具体乒乓球运动员:

    1. package zyy05;
    2. public class TennisAthlete extends Athlete implements Inter{
    3. @Override
    4. public void eat() {
    5. System.out.println("乒乓球餐");
    6. }
    7. @Override
    8. public void study() {
    9. System.out.println("学习打乒乓球");
    10. }
    11. @Override
    12. public void English() {
    13. System.out.println("乒乓球员学习英语");
    14. }
    15. }

    具体篮球运动员:

    1. package zyy05;
    2. public class BasketballAthlete extends Athlete{
    3. @Override
    4. public void eat() {
    5. System.out.println("篮球餐");
    6. }
    7. @Override
    8. public void study() {
    9. System.out.println("学习打篮球");
    10. }
    11. public BasketballAthlete() {
    12. }
    13. public BasketballAthlete(String name, int age) {
    14. super(name, age);
    15. }
    16. }

    具体乒乓球教练:

    1. package zyy05;
    2. public class TennisCoach extends Coach implements Inter{
    3. @Override
    4. public void eat() {
    5. System.out.println("乒乓球餐");
    6. }
    7. @Override
    8. public void teach() {
    9. System.out.println("教乒乓球");
    10. }
    11. @Override
    12. public void English() {
    13. System.out.println("乒乓球教练学习英语");
    14. }
    15. public TennisCoach() {
    16. }
    17. public TennisCoach(String name, int age) {
    18. super(name, age);
    19. }
    20. }

    具体篮球教练:

    1. package zyy05;
    2. public class BasketballCoach extends Coach{
    3. @Override
    4. public void teach() {
    5. System.out.println("教篮球");
    6. }
    7. @Override
    8. public void eat() {
    9. System.out.println("篮球餐");
    10. }
    11. public BasketballCoach() {
    12. }
    13. public BasketballCoach(String name, int age) {
    14. super(name, age);
    15. }
    16. }

    测试类:

    1. package zyy05;
    2. public class Demo {
    3. public static void main(String[] args) {
    4. //创建对象
    5. TennisAthlete p=new TennisAthlete();
    6. p.setName("jw");
    7. p.setAge(18);
    8. System.out.println(p.getName()+","+p.getAge());
    9. p.eat();
    10. p.study();
    11. p.English();
    12. System.out.println("************");
    13. BasketballAthlete b=new BasketballAthlete();
    14. b.setName("zyy");
    15. b.setAge(14);
    16. System.out.println(b.getName()+","+b.getAge());
    17. b.eat();
    18. b.study();
    19. System.out.println("*************");
    20. TennisCoach t=new TennisCoach();
    21. t.setName("jw");
    22. t.setAge(18);
    23. System.out.println(t.getName()+","+t.getAge());
    24. t.eat();
    25. t.teach();
    26. t.English();
    27. System.out.println("************");
    28. BasketballCoach b1=new BasketballCoach();
    29. b1.setName("zyy");
    30. b1.setAge(14);
    31. System.out.println(b1.getName()+","+b1.getAge());
    32. b1.eat();
    33. b1.teach();
    34. System.out.println("*************");
    35. }
    36. }

  • 相关阅读:
    关于我的博客~ (2022.8.25 -> 在csdn三岁啦)
    LeetCode530. Minimum Absolute Difference in BST
    python库-dotenv包 | .env配置文件
    DSPE-PEG-FSHB,FSHB-PEG-DSPE,磷脂-聚乙二醇-卵泡刺激素多肽FSHB
    Linux之Redis 缓存雪崩,击穿,穿透
    sysbench--实践--07--mysql全面压测
    【数据结构】笔试面试中常用的数据结构操作
    MySQL驱动扯后腿?Spring Boot用虚拟线程可能比用物理线程还差
    11.22二叉树相关OJ
    Flink之Window窗口机制
  • 原文地址:https://blog.csdn.net/qq_62799214/article/details/126082719