面向对象7---接口

来源:互联网 发布:java防止sql注入转义 编辑:程序博客网 时间:2024/06/06 12:27

一.接口的概述及特点

  1. 接口的概述:动物类中的具体的动物:猫和狗,有时候会具有额外的动作(跳高,计算等等…),这些动作不能定义到具体类中,所以java针对这种情况,就提供了一个关键字:interface(接口)
  2. 接口的格式:

    interface 接口名{
    }

  3. 接口的特点:

    • 接口里面定义的方法只能是抽象方法
    • 接口中没有构造方法
    • 接口的子类和接口的关系:实现(implements)
    • 接口不能实例化,需要使用接口的子类进行实例化(接口多态)
//动物类abstract class Animal{}//接口:某些动物通过培训掌握技能interface Jump{    public abstract void jump();}//狗类class Dog extends Animal{}//某些狗会跳跃class JumpDog extends Dog implements Jump{    public void jump(){        System.out.println("跳高");    }}//测试类public class Demo1 {    public static void main(String[] args){        //利用接口多态进行实例化        Jump a = new JumpDog();        a.jump();        //可以使用具体的类:实现接口的这个子类是功能最多的        JumpDog b = new JumpDog();        b.jump();    }}

这里写图片描述


二.接口和抽象类的区别

1.成员区别:

名称 成员变量 成员方法 构造方法 接口 常量 抽象方法 没有构造方法 抽象类 常量,变量 抽象和非抽象方法 有构造方法

接口:
  成员变量默认修饰符:public static final(常量)
  成员方法默认修饰符:public abstract(抽象方法)
2.关系的区别:

名称 关系 类与类 继承(extends),可以单继承,不可以多继承 接口与接口 继承(extends),可以单继承,也可以多继承 类与接口 实现(implements),可以单实现,也可以多实现

3.设计理念的区别:

名称 理念 继承 抽象类被继承体现的是:is a的关系,共性功能 接口 接口被实现体现的是:like a的关系,扩展功能

三.接口练习

  1. 教练和运动员案例:
    乒乓球运动员和篮球运动员
    乒乓球教练和篮球教练
    为了出国交流,跟乒乓球相关的人员都需要学习英请用所学知识:分析,这个案例中有哪些抽象类,哪些接口,哪些具体类
    分析:
    这里写图片描述
    人类:
public abstract class Person {    private String name;    private int age;    //无参构造    public Person() {    }    //有参构造    public Person(String name, int age) {        super();        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 void sleep(){        System.out.println("睡觉");    }    public abstract void eat(); }

运动员类:

public abstract class Player extends Person{    //无参构造    public Player() {    }    //有参构造    public Player(String name, int age) {        super(name, age);    }    public void eat(){        System.out.println("吃营养餐");    }    public abstract void study();}

教练类:

//教练类public abstract class Coach extends Person{    //无参构造    public Coach() {    }    //有参构造    public Coach(String name, int age) {        super(name, age);    }    public void eat(){        System.out.println("吃饭");    }    public abstract void teach();}

接口:

public interface StudyEnglish {    public abstract void SpeakEnglish();}

乒乓球运动员类:

public class PingpangPlayer extends Player implements StudyEnglish{    public PingpangPlayer() {    }    public PingpangPlayer(String name, int age) {        super(name, age);    }    public void study(){        System.out.println("打乒乓球");    }    public void SpeakEnglish(){        System.out.println("学习英语");    }}

篮球运动员类:

public class BasketballPlayer extends Player{    public BasketballPlayer() {    }    public BasketballPlayer(String name, int age) {        super(name, age);    }    public void study(){        System.out.println("打乒乓球");    }   }

乒乓球教练类:

public class PingpangCoach extends Coach implements StudyEnglish{    public PingpangCoach() {    }    public PingpangCoach(String name, int age) {        super(name, age);    }    public void teach(){        System.out.println("教打乒乓球");    }    public void SpeakEnglish(){        System.out.println("学习英语");    }}

篮球教练类:

public class BasketballCoach extends Coach {    public BasketballCoach() {    }    public BasketballCoach(String name, int age) {        super(name, age);    }    public void teach(){        System.out.println("教打篮球");    }   }