作者:季沐测试笔记

原文地址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. java交互Scanner类

    用next方法接收 import java.util.Scanner; public class Demo01 { public static void main(String[] args) { / ...

  2. vue js 手写 正则判断 手机号码 和 密码

    const phoneOrEmails = /^1[3|4|5|6|7|8|9][0-9]\d{8}$/             if(this.ruleForms.phoneOrEmail  ==  ...

  3. Python - 面向对象编程 - 子类方法的重写

    继承的详解 https://www.cnblogs.com/poloyy/p/15216652.html 方法的重写 在子类继承父类时,子类会拥有父类的所有属性和方法 但当父类的方法实现不满足子类需要 ...

  4. Java的参数传递是值传递还是引用传递?

    一.前言 首先先说结论,Java中方法参数传递方式是按值传递.如果参数是基本类型,传递的是基本类型的字面量值的拷贝.如果参数是引用类型,传递的是该参量所引用的对象在堆中地址值的拷贝. 接下来深入了解一 ...

  5. Vue跨域问题解决

    项目根目录下创建vue.config.js module.exports = { devServer: { proxy: { //配置跨域 '/api': { //这里是真实的后台接口 target: ...

  6. HTTP快速入门

    一.tomcat端口号设置为80,访问时候可以不加:http协议1.1版本可以复用连接,请求结束后会稍微等会: 二. 表单,get方式提交: 三.user-agent告诉服务器是哪个浏览器,代码中解决 ...

  7. 植入式Web前端开发方法

    上一篇,我讲述了植入式Web前端开发的基本情况,本篇就来探究其开发方法.以下假定CMS只能植入前端代码,并且需求规模是任意大小的. 代码形式 HTML代码是直接植入的毫无疑问,但除非植入的代码非常简短 ...

  8. Spring-图解

  9. Set代码

    现有一整数集(允许有重复元素),初始为空.我们定义如下操作:add x 把 x 加入集合del x 把集合中所有与 x 相等的元素删除ask x 对集合中元素x的情况询问 对每种操作,我们要求进行如下 ...

  10. Dede后台广告管理模块增加图片上传功能插件

    用户问题:网站广告后台管理非常方便,但是织梦后台的广告管理模块,发布广告时图片没有上传选项,只能用URL地址,很不方便,那么织梦帮就教大家一个方法实现广告图片后台直接上传,非常方便.先给大家看下修改后 ...