【javaSE】抽象类和接口(2)(接口部分)

这篇具有很好参考价值的文章主要介绍了【javaSE】抽象类和接口(2)(接口部分)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

 ❤️❤️前言~🥳🎉🎉🎉

hellohello~,大家好💕💕,这里是E绵绵呀✋✋ ,如果觉得这篇文章还不错的话还请点赞❤️❤️收藏💞 💞 关注💥💥,如果发现这篇文章有问题的话,欢迎各位评论留言指正,大家一起加油!一起chin up!👍👍 

【javaSE】抽象类和接口(2)(接口部分),JAVA知识点专栏,开发语言,java

💥个人主页:E绵绵的博客
💥 所属专栏:JAVASE题目练习  JAVASE知识点专栏  c语言知识点专栏   c语言题目练习

                         那现在我们就开始接口的学习吧。(接口这部分作者打算两篇文章介绍完)

【javaSE】抽象类和接口(2)(接口部分),JAVA知识点专栏,开发语言,java

接口的概念

接口就是公共的行为规范标准,大家在实现时,只要符合规范标准,就可以通用。

在Java中,接口可以看成是:多个类的公共规范,它是一种引用数据类型。

接口的语法规则

接口的定义格式与定义类的格式基本相同,将class关键字换成interface 关键字,就定义了一个接口。

​
public interface 接口名称{
    // 抽象方法
    public abstract void method1();   // public abstract 是固定搭配,可以不写
    public void method2();
    abstract void method3();
    void method4();
    
    // 注意:在接口中上述写法都是抽象方法,更推荐方式4,代码更简洁
}


​

❤️❤️提示:

1. 创建接口时, 接口的命名一般以大写字母开头.

2. 阿里编码规范中约定, 接口中的方法和属性一般不要加任何修饰符号(除default,static), 保持代码的简洁性.  

 接口的使用

💥💥接口不能直接使用,必须要有一个"实现类"来"实现"该接口,实现接口中的所有抽象方法。 

注意:子类和父类之间是extends 继承关系,类与接口之间是 implements 实现关系。

// USB接口
public interface USB {
    void openDevice();
    void closeDevice();
}
 
// 鼠标类,实现USB接口
public class Mouse implements USB {
    @Override
    public void openDevice() {
        System.out.println("打开鼠标");
   }
     @Override
    public void closeDevice() {
        System.out.println("关闭鼠标");
   }
 
    public void click(){
        System.out.println("鼠标点击");
   }
}
 
// 键盘类,实现USB接口
public class KeyBoard implements USB {
    @Override
    public void openDevice() {
        System.out.println("打开键盘");
   }
 
    @Override
    public void closeDevice() {
        System.out.println("关闭键盘");
   }
 
    public void inPut(){
        System.out.println("键盘输入");
   }
}
 
// 笔记本类:使用USB设备
public class Computer {
    public void powerOn(){
        System.out.println("打开笔记本电脑");
   }
 
    public void powerOff(){
        System.out.println("关闭笔记本电脑");
   }
 
    public void useDevice(USB usb){
        usb.openDevice();
        if(usb instanceof Mouse){
            Mouse mouse = (Mouse)usb;
            mouse.click();
       }else if(usb instanceof KeyBoard){
            KeyBoard keyBoard = (KeyBoard)usb;
            keyBoard.inPut();
       }
        usb.closeDevice();
   }
}
 
// 测试类:
public class TestUSB {
    public static void main(String[] args) {

 
        Computer computer = new Computer();
        computer.powerOn();
 
        // 使用鼠标设备
        computer.useDevice(new Mouse());
 
        // 使用键盘设备
        computer.useDevice(new KeyBoard());
 
        computer.powerOff();
   }
}

🎯🎯接口特性

❤️❤️1.  接口类型是一种引用类型,但是不能直接用它创建接口的实例对象,只能当作引用变量去接收跟其有(implements)实现关系的类的实例对象。

public class TestUSB {
    public static void main(String[] args) {
        USB usb = new USB();
   }
}
 
// Error:(10, 19) java: day20210915.USB是抽象的; 无法实例化

 ❤️❤️2.接口中的成员变量类型都必须是 public static final ,如果我们不写 public static final或者缺一部分它都依然代表public static final。

但切记如果其中出现了不同的修饰词,那就会报错,如protected static 这种直接报错,因为出现了不同的修饰词(缺少一部分都不要紧,就是不能出现不同的修饰词)

public interface USB {
    double brand = 3.0;  // 默认被:final public static修饰
    void openDevice();
    void closeDevice();
}
 
public class TestUSB {
    public static void main(String[] args) {
        System.out.println(USB.brand);   // 可以直接通过接口名访问,说明是静态的
        
        // 编译报错:Error:(12, 12) java: 无法为最终变量brand分配值
        USB.brand = 2.0;       // 说明brand具有final属性
   }
}

❤️❤️🎯🎯 (重点)3.接口当中的方法分为三种: 抽象方法,static修饰的方法,default修饰的方法

1.抽象方法必须是public abstract类型,其道理跟接口的成员变量一样,都是能缺块,甚至不写,但不能出现不同。

其抽象方法不能被直接实现(需要重写去间接实现),而接下来的下面两种方法都是能被直接实现的。

​
interface USB {
    // Error:(4, 18) java: 此处不允许使用修饰符private
    private void openDevice();
    void closeDevice();
}

​

2.接口中static修饰的方法类型必须为public static ,可以隐藏变为static。其不能被重写。它的使用方式跟平常所见的static修饰方法没区别

3.用defalut修饰的类型同理必须为public defalut,可以隐藏变为defalut。对于该方法,可以不重写,也可以重写。我们可以认为它跟普通类中的非静态方法一样,使用也是跟非静态方法差不多的。

 ❤️❤️4.重写接口中方法时,访问修饰符必须为public

public interface USB { 
 
public class Mouse implements USB {
    @Override
    void openDevice() {
        System.out.println("打开鼠标");
   }
    
    // ...
}
 
// 编译报错,重写USB中openDevice方法时,不能使用默认修饰符
// 正在尝试分配更低的访问权限; 以前为public

❤️❤️5.接口中不能有静态代码块,实例代码块,构造方法出现,否则会报错

public interface USB {
    // 编译失败
    public USB(){
 
   }
 
   {}    // 编译失败
    
    void openDevice();
    void closeDevice();
}

 ❤️❤️🎯🎯 (重点)6接口中的成员访问修饰符想必大家都清楚,都是默认且必须用public访问修饰符修饰。而到了我们的接口,其不需要用访问修饰符修饰,默认就是public修饰符,但如果你用访问修饰符修饰,它则会报错。

【javaSE】抽象类和接口(2)(接口部分),JAVA知识点专栏,开发语言,java

而对于接口我们还要清楚它是用abstract修饰的,所以内部才会有抽象方法。我们平常没见到abstract修饰接口,是因为即使不主动用abstract修饰接口,系统也会默认用abstarct隐藏修饰它,所以不写sbstract也可以。【javaSE】抽象类和接口(2)(接口部分),JAVA知识点专栏,开发语言,java

❤️❤️7 接口虽然不是类,但是接口编译完成后字节码文件的后缀格式也是.class,也是有对应的字节码文件。(所以我们其实可以把接口认为是一个特殊的类)

❤️❤️8. 如果类没有实现接口中的所有的抽象方法,则类必须设置为抽象类。

🎯🎯实现多个接口//继承和接口并用

💕💕 在Java中,类和类之间是单继承的,一个类只能有一个父类,即Java中不支持多继承,但是我们的一个类可以实现多个接口。

【javaSE】抽象类和接口(2)(接口部分),JAVA知识点专栏,开发语言,java

而且一个类还可以在继承父类的同时实施多个接口。

【javaSE】抽象类和接口(2)(接口部分),JAVA知识点专栏,开发语言,java

注意继承和接口并用的话,extends必须在implements前面,否则会报错。

【javaSE】抽象类和接口(2)(接口部分),JAVA知识点专栏,开发语言,java

🎯🎯 对于继承和接口并用时的子类内存分布如下,以下图为例。

【javaSE】抽象类和接口(2)(接口部分),JAVA知识点专栏,开发语言,java

下图代码能证明内存分布跟我们上图中的一样

【javaSE】抽象类和接口(2)(接口部分),JAVA知识点专栏,开发语言,java

正是因为都独立存在于子类中,所以在子类的实例对象中中找a变量才不明确,不确定为哪个。

 接口间的继承

❤️❤️在接口中,继承是指一个接口可以继承一个接口或多个接口(注意可以继承多个接口)接口中的继承可以通过关键字"extends"来实现,通过继承父接口可以拥有父接口的方法和属性,并且可以在子接口中添加新的方法和属性。子接口可以使用继承的方法和属性。

对于接口继承后的使用,是跟普通类继承的使用一样。

继承的好处是可以实现代码的重用和模块化,提高代码的可维护性和可扩展性。通过继承,可以将一些通用的方法和属性定义在父接口中,然后让多个子接口去继承这些通用的方法和属性,从而避免了重复编写相同的代码。

注意当接口继承接口时,子接口并不需要重写父接口的抽象方法,只有当类实现子接口时,才需要将子接口本来的抽象方法和父接口的抽象方法在该类中全部重写。

interface IRunning {
    void run();
}
 
interface ISwimming {
    void swim();
}
 
// 两栖的动物, 既能跑, 也能游
interface IAmphibious extends IRunning, ISwimming {
 
}
 
class Frog implements IAmphibious {
 ...
}

通过接口继承创建一个新的接口 IAmphibious 表示 "两栖的". 此时实现接口创建的 Frog 类, 就要重写 run 方 法, 也需要重写 swim 方法.

接口间的继承相当于把多个接口合并在一起.

接口第一部分完结

 那么到这里我们的接口第一部分就结束了:把该讲的语法大部分讲完了。之后将会给大家带来接口第二部分:接口使用实例,这部分会比较难点,不过只要努力坚持下去,一切困难都会被攻克的,一起加油吧!👊 👊 

(我们可以认为接口是一个特殊的类,其有特定的规则,这样子就好记多了)

【javaSE】抽象类和接口(2)(接口部分),JAVA知识点专栏,开发语言,java文章来源地址https://www.toymoban.com/news/detail-860534.html

到了这里,关于【javaSE】抽象类和接口(2)(接口部分)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 板卡设计+硬件每日学习十个知识点(44)23.8.24 (检测单元设计,接口部分设计,板卡电源输入设计,电源检测电路)

    答: 首先要为检测单元的单片机设计一个最小系统板,包括时钟、供电、调试JTAG、复位。 然后设计检测单元GD32的功能电路,包括温度监测、电压监测、电流监测、FPGA启动检测、PS侧的复位控制、LED状态灯。 最后是和PL侧使用I2C通信的通信电路。 这些让我设计的话,可能得

    2024年02月11日
    浏览(65)
  • JavaSE核心基础-循环-知识点

    1.循环概念 循环是在满足条件的情况下,反复的做同一件事。 Java语言中的循环语句有三种,分别是for语句、while语句和do-while语句。程序中需要循环处理时,程序员要根据实际问题,选择适当的循环语句。解决循环问题时一定要找到循环条件和循环操作。 2.for循环语句格式

    2024年02月22日
    浏览(44)
  • 一文让你深入了解JavaSE的知识点

    ꒰˃͈꒵˂͈꒱ write in front ꒰˃͈꒵˂͈꒱ ʕ̯•͡˔•̯᷅ʔ大家好,我是xiaoxie.希望你看完之后,有不足之处请多多谅解,让我们一起共同进步૮₍❀ᴗ͈ . ᴗ͈ აxiaoxieʕ̯•͡˔•̯᷅ʔ—CSDN博客 本文由xiaoxieʕ̯•͡˔•̯᷅ʔ 原创 CSDN 如需转载还请通知˶⍤⃝˶ 个人主页:xiaoxieʕ̯

    2024年02月04日
    浏览(43)
  • 前端面试的性能优化部分(12)每天10个小知识点

    👍 点赞,你的认可是我创作的动力! ⭐️ 收藏,你的青睐是我努力的方向! ✏️ 评论,你的意见是我进步的财富! HTTP缓存头是在HTTP响应中设置的指令,用于控制浏览器和代理服务器在客户端和服务器之间缓存内容的行为。以下是我对HTTP缓存头(如Cache-Control和ETag)的了

    2024年02月12日
    浏览(85)
  • 前端面试的游览器部分(6)每天10个小知识点

    👍 点赞,你的认可是我创作的动力! ⭐️ 收藏,你的青睐是我努力的方向! ✏️ 评论,你的意见是我进步的财富! 😍( 求奖牌ing ) 浏览器的事件机制是指在网页中用户与页面元素交互时,浏览器是如何处理和传递这些事件的。事件流是描述事件在页面元素之间传播的方

    2024年02月12日
    浏览(76)
  • 前端面试的性能优化部分(10)每天10个小知识点

    内联脚本和内联样式是将JavaScript代码和CSS样式直接嵌入到HTML页面中的做法。虽然这样做可以减少外部请求,但也可能对性能和可维护性产生影响。以下是处理内联脚本和内联样式以及它们对性能的影响的一些方法和考虑事项: 内联脚本的处理: 减少体积: 内联脚本会增加

    2024年02月12日
    浏览(55)
  • 前端面试的性能优化部分(5)每天10个小知识点

    渲染性能优化是指通过各种技术和策略,提高应用程序在浏览器或移动设备上绘制和渲染UI的速度和效率。在处理大型数据集或复杂UI时,渲染性能优化尤为重要,以确保流畅的用户体验和高效的应用程序运行。 以下是一些渲染性能优化的方法,特别适用于处理大型数据集或

    2024年02月14日
    浏览(51)
  • 前端面试的性能优化部分(6)每天10个小知识点

    首次内容渲染(First Contentful Paint,FCP)和首次有意义渲染(First Meaningful Paint,FMP)是衡量网页加载性能的指标,它们都关注页面加载过程中的用户体验。以下是我对这两个指标的理解: 首次内容渲染(FCP): 首次内容渲染是指从页面加载开始到浏览器首次绘制页面上的任何

    2024年02月13日
    浏览(48)
  • 前端面试的计算机网络部分(2)每天10个小知识点

    👍 点赞,你的认可是我创作的动力! ⭐️ 收藏,你的青睐是我努力的方向! ✏️ 评论,你的意见是我进步的财富! DNS(Domain Name System)是一种用于将域名转换为IP地址的系统,使我们能够通过易记的域名访问互联网资源。DNS查询过程可以分为递归查询和迭代查询两种方式

    2024年02月12日
    浏览(51)
  • 前端面试的计算机网络部分(4)每天10个小知识点

    👍 点赞,你的认可是我创作的动力! ⭐️ 收藏,你的青睐是我努力的方向! ✏️ 评论,你的意见是我进步的财富! IPv4(Internet Protocol version 4)和IPv6(Internet Protocol version 6)是互联网上两种不同的IP地址分配方案,用于标识和定位设备在网络中的位置。它们之间有以下主

    2024年02月11日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包