接口有什么用呢?
接口可以定义服务提供者接口,这些接口允许应用程序查找并使用提供特定服务的类。
我们先从继承关系讲起:
类:类与类之间只能是单继承,也可以多层继承。
单继承我们都理解,就是子类继承父类。多层继承是什么意思?
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();
}
}
输出结果:
其中有一部分高中生会敲代码
这些高中生还会讲英语
其中有一部分大学生会敲代码
这些大学生还会讲英语