Java接口的复杂应用

接口有什么用呢?

接口可以定义服务提供者接口,这些接口允许应用程序查找并使用提供特定服务的类。

我们先从继承关系讲起:

类:类与类之间只能是单继承,也可以多层继承。

单继承我们都理解,就是子类继承父类。多层继承是什么意思?

class B{
    public void show1(){

    }
}

class C extends B{

}

class D extends C{

}

像这样,C继承了B,D又继承了C,这就叫多层继承

class A{
    public void show(){

    }
}

class B{
    public void show1(){

    }
}
class C extends B,A{//会报错!

}

但是不可以这样C同时继承B与A,不可以多重继承!

接口:既可以单继承可以多继承

interface A{
    
        }
interface B{
    
}
interface C extends A,B{
    
}

类与接口:类与法则是实现关系,既可以单实现,也可以多实现。

interface A{

        }
interface B{

}
interface C extends A,B{

}

class AImpl implements A,B,C{

}

还可以在实现的基础上去继承。

interface A{

        }
interface B{

}
interface C extends A,B{

}

class AImpl extends Object implements A,B,C{

}

//只要是类就默认继承Object 类

接口支持多重继承。Java中的类只能继承一个类,但可以实现多个接口。这使得我们可以将不同的功能组合在一起,形成更具灵活性和可重用性的代码。具体应用一会儿会讲到。

🆗,上面的搞懂之后我们看一个接口案例:

设置一个学生抽象类

具体类大学生,行为:吃,睡,学习

具体类高中生,行为:吃,睡,学习

因为高中生和大学生都有相同的功能,所以我们可以抽取一个父类即学生类

学生类的成员方法 吃(抽象),睡(抽象),学习(具体)

abstract class Student{
    public abstract void eat();
    public abstract void sleep();
    public void study(){
        System.out.println("学生学习");
    }
}

然后子类大学生与高中生继承父类

class highSchool extends Student{
    @Override
    public void eat() {
        System.out.println("高中生恰饭");
    }

    @Override
    public void sleep() {
        System.out.println("高中生睡觉");
    }
}

class College extends Student{
    @Override
    public void eat() {
        System.out.println("大学生恰饭");
    }

    @Override
    public void sleep() {
        System.out.println("大学生睡觉");
    }
}

问题来了,这其中有一部分高中生与大学生特别聪明,经过系统学习,既能够敲代码还能说一口流畅的英语。

注意:敲代码和说英语不是所有学生都有的功能!只是两个额外的扩充功能。

为了实现“敲代码”“说英语”功能,该怎么做呢?

我们可以定义敲代码和说英语的接口,接口中提供敲代码和说英语的方法声明:

interface coding{
    public abstract void code();
}
interface English{
    public abstract void SpeakEnglish();
}

然后我们创建实现类来实现接口:

class HighSchoolGenius extends highSchool implements coding,English{//刚刚讲的,可以在继承的基础上实现接口
    @Override
    public void code() {//这个类中不仅有学生的所有功能,还具有了coding接口的code和English功能
        System.out.println("其中有一部分高中生会敲代码");
    }
@Override
public void SpeakEnglish() {
    System.out.println("这些高中生还会讲英语");
}

}

class CollegeGenius extends College implements coding,English{

    @Override
    public void code() {//这个类中不仅有学生的所有功能,还具有了coding接口的code和English功能

        System.out.println("其中有一部分大学生会敲代码");
    }
@Override
public void SpeakEnglish() {
    System.out.println("这些大学生还会讲英语");
}

}

接口支持多重继承。Java中的类只能继承一个类,但可以实现多个接口。这使得我们可以将不同的功能组合在一起,形成更具灵活性和可重用性的代码。

通过接口,我们就有了会敲代码的高中生和大学生!

接着去创建对象,调用方法!

public class Review_interface1 {
    public static void main(String[] args) {
      coding cc= new HighSchoolGenius();
      cc.code();

      English cc2 = new HighSchoolGenius();
      cc2.SpeakEnglish();

      coding bb = new CollegeGenius();
      bb.code();

      English bb2 = new CollegeGenius();
      bb2.SpeakEnglish();
    }
}

输出结果:

其中有一部分高中生会敲代码

这些高中生还会讲英语

其中有一部分大学生会敲代码

这些大学生还会讲英语

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值