【java篇】第四话-java接口详解

举报
橙子! 发表于 2022/07/01 09:56:46 2022/07/01
【摘要】 由于Java不支持多重继承,所以可以利用接口实现类似于多重继承的机制,同时规避了C++多重继承中存在很多歧义的问题,使代码更加简洁,逻辑清晰,安全可靠。`一个类只能有一个直接父类,但是它可以同时实现多个接口`,可以把接口理解为类,即实现了Java类的多重继承。

个人简介

  • 💖作者简介:大家好!我是orangemilk_。
  • ✅个人主页:orangemilk_
  • 📂 喜欢:🌈点赞🌈收藏!更新Java🌈python编程进阶之路。
  • ✊加油,共勉!

✅1.接口的定义

🌈接口是一种特殊的抽象类,是Java提供的一个重要的功能,与抽象类不同的是:

  • 🚀接口的所有数据成员都是静态的且必须初始化。
  • 🚀接口中的所有方法必须都是抽象方法,不能有一般的方法。
[public] interface 接口名称 [extends  父接口名列表]
{
	[public] [static] [final]数据类型 成员变量名 = 常量;
	...
	[public][abstract]返回值数据类型 方法名(参数表);
	...
}

在这里插入图片描述

其中,成员方法必须都是抽象方法。接口定义的[ ]中的修饰符可以省略,省略后默认为以上访问权限。

---🍁分割线🍁---

✅2.接口的实现

🌈接口和抽象类一样不能用来实例化对象,必须借用接口的特征创建出来一个新的类,然后用新的类来实例化对象。

  • 🚀利用接口创建新的类的过程称为接口的实现。
  • 🚀实现一个接口的过程使用implements关键字。
class 类名称 implements 接口名表
{
	...
}

在这里插入图片描述

  • 🚀如果实现某接口的类不是抽象类,那么它必须实现指定接口的所有抽象方法。
  • 🚀类在实现接口的方法时必须显式的使用pulic访问权限修饰符,子类覆盖父类方法时不可以缩小父类方法的访问权限范围。
---🍁分割线🍁---

✅3.接口的引用

🌈接口可以作为一种引用类型来使用,任何实现该接口的类实例化的对象都可以储存在该接口类型的变量中,通过这些变量访问类所实现的接口中的方法。

在这里插入图片描述

---🍁分割线🍁---

✅4.接口的继承

🌈当然啦!接口和类一样也可以使用继承派生出来新的类。也可以通过extends关键字来实现,被继承的接口称为父接口,派生出来的新接口称为子接口。但是不同的是,一个子接口可以同时有多个直接父接口。它们之间用逗号分隔。子接口继承父接口的所有变量和方法。

如果子接口中定义了和父接口同名的常量,父接口中的常量被隐藏,如果时方法,则被覆盖。

interface A{
    abstract void print1();
}
interface B extends A{
    abstract void print2();
}
class C implements B{
    public void print1(){
        System.out.print("Hello");
    }
    public void print2(){
        System.out.print("World");
    }
}
public class Print{
    public static void main(String[] args){
        B b=new C();
        b.print1();
        b.print2();
    }
}

在这里插入图片描述

🌈其中B接口是A接口的直接父接口,C类实现B接口,覆盖B接口中的所有的抽象方法。Print类是主类,定义接口的引用指向实现它的类的实例化对象,访问类所实现的接口中的方法。(接口作为引用数据类型使用)

---🍁分割线🍁---

✅5.利用接口实现多重继承

🌈由于Java不支持多重继承,所以可以利用接口实现类似于多重继承的机制,同时规避了C++多重继承中存在很多歧义的问题,使代码更加简洁,逻辑清晰,安全可靠。一个类只能有一个直接父类,但是它可以同时实现多个接口,可以把接口理解为类,即实现了Java类的多重继承。

//filename:Cylinder.java
interface Face1{
    final double PI=3.14;
    abstract double area();
}
interface Face2{
    abstract void volume();
}
public class Cylinder implements Face1,Face2{
    private double radius;
    private int height;
    public Cylinder(double r,int h){
        radius=r;
        height=h;
    }
    public double area(){
        return PI*radius*radius;
    }
    public void volume(){
        System.out.print("圆柱体的体积="+this.area()*height);
    }
    public static void main(String[] args){
        Cylinder volu=new Cylinder(5.0,2);
        volu.volume();
    }
}
//圆柱体的体积=157.0
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。