面向对象7---接口

一.接口的概述及特点

  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("教打篮球");
    }   
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值