作者:季沐测试笔记

原文地址https://www.cnblogs.com/testero/p/15201629.html

博客主页https://www.cnblogs.com/testero

1. 接口的概述

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

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

2. 接口的特点

  • 接口用关键字interface修饰

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

    public class 类名 implements 接口名 {}
  • 接口不能实例化

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

    ​ 多态的形式:具体类多态,抽象类多态,接口多态。

  • 接口的子类

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

    ​ 要么子类也是抽象类

3. 接口的成员特点

  • 成员特点

    • 成员变量

      ​ 只能是常量

      ​ 默认修饰符:public static final

    • 构造方法

      ​ 没有,因为接口主要是扩展功能的,而没有具体存在

    • 成员方法

      ​ 只能是抽象方法

      ​ 默认修饰符:public abstract

      ​ 关于接口中的方法,JDK8和JDK9中有一些新特性,后面再讲解

  • 代码演示

    • 接口
    public interface Inter {
    public int num = 10;
    public final int num2 = 20;
    // public static final int num3 = 30;
    int num3 = 30; // public Inter() {} // public void show() {} public abstract void method();
    void show();
    }
    • 实现类
    public class InterImpl extends Object implements Inter {
    public InterImpl() {
    super();
    } @Override
    public void method() {
    System.out.println("method");
    } @Override
    public void show() {
    System.out.println("show");
    }
    }
    • 测试类
    public class InterfaceDemo {
    public static void main(String[] args) {
    Inter i = new InterImpl();
    // i.num = 20;
    System.out.println(i.num);
    // i.num2 = 40;
    System.out.println(i.num2);
    System.out.println(Inter.num);
    }
    }

4. 接口的案例

  • 案例需求

    ​ 对猫和狗进行训练,他们就可以跳高了,这里加入跳高功能。

    ​ 请采用抽象类和接口来实现猫狗案例,并在测试类中进行测试。

  • 代码实现

    • 动物类
    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();
    }
    • 跳高接口
    public interface Jumpping {
    public abstract void jump();
    }
    • 猫类
    public class Cat extends Animal implements Jumpping {
    
        public Cat() {
    } public Cat(String name, int age) {
    super(name, age);
    } @Override
    public void eat() {
    System.out.println("猫吃鱼");
    } @Override
    public void jump() {
    System.out.println("猫可以跳高了");
    }
    }
    • 测试类
    public class AnimalDemo {
    public static void main(String[] args) {
    //创建对象,调用方法
    Jumpping j = new Cat();
    j.jump();
    System.out.println("--------"); Animal a = new Cat();
    a.setName("加菲");
    a.setAge(5);
    System.out.println(a.getName()+","+a.getAge());
    a.eat();
    // a.jump(); a = new Cat("加菲",5);
    System.out.println(a.getName()+","+a.getAge());
    a.eat();
    System.out.println("--------"); Cat c = new Cat();
    c.setName("加菲");
    c.setAge(5);
    System.out.println(c.getName()+","+c.getAge());
    c.eat();
    c.jump();
    }
    }

5类和接口的关系

  • 类与类的关系

    ​ 继承关系,只能单继承,但是可以多层继承

  • 类与接口的关系

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

  • 接口与接口的关系

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

6抽象类和接口的区别

  • 成员区别

    • 抽象类

      ​ 变量,常量;有构造方法;有抽象方法,也有非抽象方法

    • 接口

      ​ 常量;抽象方法

  • 关系区别

    • 类与类

      ​ 继承,单继承

    • 类与接口

      ​ 实现,可以单实现,也可以多实现

    • 接口与接口

      ​ 继承,单继承,多继承

  • 设计理念区别

    • 抽象类

      ​ 对类抽象,包括属性、行为

    • 接口

      ​ 对行为抽象,主要是行为

7.综合案例

7.1案例需求

​ 我们现在有乒乓球运动员和篮球运动员,乒乓球教练和篮球教练。

​ 为了出国交流,跟乒乓球相关的人员都需要学习英语。

​ 请用所学知识分析,这个案例中有哪些具体类,哪些抽象类,哪些接口,并用代码实现。

7.2代码实现

  • 抽象人类
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;
} public abstract void eat();
}
  • 抽象运动员类
public abstract class Player extends Person {
public Player() {
} public Player(String name, int age) {
super(name, age);
} public abstract void study();
}
  • 抽象教练类
public abstract class Coach extends Person {
public Coach() {
} public Coach(String name, int age) {
super(name, age);
} public abstract void teach();
}
  • 学英语接口
public interface SpeakEnglish {
public abstract void speak();
}
  • 蓝球教练
public class BasketballCoach extends Coach {
public BasketballCoach() {
} public BasketballCoach(String name, int age) {
super(name, age);
} @Override
public void teach() {
System.out.println("篮球教练教如何运球和投篮");
} @Override
public void eat() {
System.out.println("篮球教练吃羊肉,喝羊奶");
}
}
  • 乒乓球教练
public class PingPangCoach extends Coach implements SpeakEnglish {

    public PingPangCoach() {
} public PingPangCoach(String name, int age) {
super(name, age);
} @Override
public void teach() {
System.out.println("乒乓球教练教如何发球和接球");
} @Override
public void eat() {
System.out.println("乒乓球教练吃小白菜,喝大米粥");
} @Override
public void speak() {
System.out.println("乒乓球教练说英语");
}
}
  • 乒乓球运动员
public class PingPangPlayer extends Player implements SpeakEnglish {

    public PingPangPlayer() {
} public PingPangPlayer(String name, int age) {
super(name, age);
} @Override
public void study() {
System.out.println("乒乓球运动员学习如何发球和接球");
} @Override
public void eat() {
System.out.println("乒乓球运动员吃大白菜,喝小米粥");
} @Override
public void speak() {
System.out.println("乒乓球运动员说英语");
}
}
  • 篮球运动员
public class BasketballPlayer extends Player {

    public BasketballPlayer() {
} public BasketballPlayer(String name, int age) {
super(name, age);
} @Override
public void study() {
System.out.println("篮球运动员学习如何运球和投篮");
} @Override
public void eat() {
System.out.println("篮球运动员吃牛肉,喝牛奶");
}
}

Java(19)接口知识及综合案例的更多相关文章

  1. 二十一、Java基础--------IO流之综合案例分析

    前三篇文章详细介绍了IO流体系所涉及的重点内容,为了帮助理解与学习,本片博客主要是分析一个与IO操作相关的题目. 例1:在我们观看视频时经常要关注的就是视频的时间长度,在学习了IO操作之后,就可以自己 ...

  2. 【Java】集合综合案例 - 播放器管理

    集合综合案例 文章目录 集合综合案例 需求分析 项目演示 详细设计 代码实现 歌曲类 播放器类 播放列表类 测试 参考资料 播放器管理 需求分析 项目演示 详细设计 代码实现 重新搞一波 复习巩固 简 ...

  3. Mybatis高级:Mybatis注解开发单表操作,Mybatis注解开发多表操作,构建sql语句,综合案例学生管理系统使用接口注解方式优化

    知识点梳理 课堂讲义 一.Mybatis注解开发单表操作 *** 1.1 MyBatis的常用注解 之前我们在Mapper映射文件中编写的sql语句已经各种配置,其实是比较麻烦的 而这几年来注解开发越 ...

  4. 学习java接口知识

    学习java接口知识 //一个类最多只能有一个直接的父类.但是有多个间接的父类. java是单继承. class ye_01{ String name; } class fu_01 extends y ...

  5. java全栈day11----构造方法 综合案例

    构造方法 在开发中经常需要在创建对象的同时明确对象的属性值,比如员工入职公司就要明确他的姓名.年龄等属性信息. 那么,创建对象就要明确属性值,那怎么解决呢?也就是在创建对象的时候就要做的事情,当使用n ...

  6. 075 01 Android 零基础入门 01 Java基础语法 09 综合案例-数组移位 07 综合案例-数组移位-主方法功能4的实现

    075 01 Android 零基础入门 01 Java基础语法 09 综合案例-数组移位 07 综合案例-数组移位-主方法功能4的实现 本文知识点:综合案例-数组移位-主方法功能4的实现 说明:因为 ...

  7. 074 01 Android 零基础入门 01 Java基础语法 09 综合案例-数组移位 06 综合案例-数组移位-主方法功能3的实现

    074 01 Android 零基础入门 01 Java基础语法 09 综合案例-数组移位 06 综合案例-数组移位-主方法功能3的实现 本文知识点:综合案例-数组移位-主方法功能3的实现 说明:因为 ...

  8. 073 01 Android 零基础入门 01 Java基础语法 09 综合案例-数组移位 05 综合案例-数组移位-主方法功能1和2的实现

    073 01 Android 零基础入门 01 Java基础语法 09 综合案例-数组移位 05 综合案例-数组移位-主方法功能1和2的实现 本文知识点:综合案例-数组移位-主方法功能1和2的实现 说 ...

  9. 072 01 Android 零基础入门 01 Java基础语法 09 综合案例-数组移位 04 综合案例-数组移位-在指定位置处插入数据方法

    072 01 Android 零基础入门 01 Java基础语法 09 综合案例-数组移位 04 综合案例-数组移位-在指定位置处插入数据方法 本文知识点:综合案例-数组移位-在指定位置处插入数据方法 ...

随机推荐

  1. MySQL-后知知觉的索引

       什么是索引? 索引在MySQL中也叫做"键",是存储引擎用于快速找到记录的一种数据结构.索引对于良好的性能 非常关键,尤其是当表中的数据量越来越大时,索引对于性能的影响愈发重 ...

  2. 关于IDEA无法加载main方法的bug

    问题现象 main方法没有run按钮 问题解决 发现args显示灰色未调用,原来是之前莫名其妙调用了sun包下的String 删除调用问题解决!

  3. redis未授权getshell的4种方式

    前言 redis未授权漏洞或弱口令一直是很有用的渗透突破口,最近正好闲的无事就拿redis来测试一些,做一个简单的收集,方便自己日后的回顾. 漏洞描述 Redis 默认情况下,会绑定在 0.0.0.0 ...

  4. 【CSS】拼图验证练习

    抄自B站Up主CodingStartup起码课 <!DOCTYPE html> <html lang="en"> <head> <meta ...

  5. Flask - 访问返回字典的接口报错:The view function did not return a valid response. The return type must be a string, tuple, Response instance, or WSGI callable, but it was a dict.

    背景 有一个 Flask 项目,然后有一个路由返回的是 dict 通过浏览器访问,结果报错 关键报错信息 TypeError: 'dict' object is not callable The vi ...

  6. 大数据最后一公里——2021年五大开源数据可视化BI方案对比

    个人非常喜欢这种说法,最后一公里不是说目标全部达成,而是把整个路程从头到尾走了一遍. 大数据在经过前几年的野蛮生长以后,开始与数据中台的概念一同向着更实际的方向落地.有人问,数据可视化是不是等同于数据 ...

  7. vue父组件中调用子组件的方法

    Vue项目中如何在父组件中直接调用子组件的方法: 方案一:通过ref直接调用子组件的方法: //父组件中 <template> <div> <Button @click= ...

  8. 通过Kubernetes监控探索应用架构,发现预期外的流量

    大家好,我是阿里云云原生应用平台的炎寻,很高兴能和大家一起在 Kubernetes 监控系列公开课上进行交流.本次公开课期望能够给大家在 Kubernetes 容器化环境中快速发现和定位问题带来新的解 ...

  9. ESP8266- ESP01之AT固件下载及其他问题

    注意: 本文基于淘宝上买的安信可原装ESP-01,文章中出现的问题在另一片ESP-01S上均未出现.由于在刷固件前没有进行完整测试,因此无法判断是固件导致的还是版本不同造成的. 问题: 1.发热严重. ...

  10. PHP中命名空间是怎样的存在?(三)

    这是与命名空间有关的最后一篇.最后还是两个比较简单的内容,是关于命名空间和全局相关的一些类.函数.常量的使用对比.当然,最后我们还会总结一下命名空间的名称解析规则做为这三篇系列文章的结束. 全局空间 ...