作者:季沐测试笔记

原文地址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. 用CUDA写出比Numpy更快的规约求和函数

    技术背景 在前面的几篇博客中我们介绍了在Python中使用Numba来写CUDA程序的一些基本操作和方法,并且展示了GPU加速的实际效果.在可并行化的算法中,比如计算两个矢量的加和,或者是在分子动力学 ...

  2. 24点游戏(24 game)的C++编程求解实现

    什么是24点游戏 24点游戏,英文叫做24 game,是对给定的4个非负整数进行加减乘除运算,要求每个数都要被用到且仅用到一次,并得到最终的运算结果为24.比如3.8.3.8这四个数,可以找出唯一的一 ...

  3. vue 打开新窗口进行打印

    父文件 let { href } = this.$router.resolve({ path: ' 自己配置本地路由,不需要动态路由 ', query: 个人建议传一整个对象 }) window.op ...

  4. vue 封装 axios 和 各类的请求,以及引入 .vue 文件中使用

    //src 底下建立 api 文件夹 // api 文件夹下建立 request,js 文件,文件内容复制下面这段代码即可   /**  * ajax请求配置  */ import axios fro ...

  5. netfilter框架之hook点

    1. Netfilter中hook的所在位置 当网络上有数据包到来时,由驱动程序将数据包从网卡内存区通过DMA转移到设备主存区(内存区), 之后触发中断通知CPU进行异步响应,之后ip_rcv函数会被 ...

  6. Postman调试Abp API

    在swagger中查看登录需要用post方式访问,Abp需要用application/json方式调用 请求体 Postman调用方式 例:访问所有用户,调用Api地址为http://localhos ...

  7. C# Dapper基本三层架构使用 (四、Web UI层)

    三层架构的好处,一套代码无论WinForm还是Web都可以通用,只写前台逻辑就可以了,现在展示Web调用三层的示例 首先在项目中创建一个Web MVC5项目,目前项目目录如下 在Web项目Web.co ...

  8. 如何在C#中打开和读取EXCEL文件

    这篇文章向您展示如何在C#Windows Forms Application中使用ExcelDataReader,ExcelDataReader.DataSet打开和读取Excel文件.创建一个新的W ...

  9. (3)java Spring Cloud+Spring boot+mybatis企业快速开发架构之SpringCloud-Spring Cloud和Dubbo的区别及各自的优缺点

    ​ 我们先从 Nginx 说起,了解为什么需要微服务.最初的服务化解决方案是给相同服务提供一个统一的域名,然后服务调用者向这个域发送 HTTP 请求,由 Nginx 负责请求的分发和跳转. 这种架构存 ...

  10. Vue项目中应用TypeScript

    一.前言 与如何在React项目中应用TypeScript类似 在VUE项目中应用typescript,我们需要引入一个库vue-property-decorator, 其是基于vue-class-c ...