zoukankan      html  css  js  c++  java
  • 接口与抽象类

    接口interface

    在Java中接口的实现形式:

    1 [public] interface InterfaceName {
    2  
    3 }

    接口中可以定义变量、方法。对于变量,必须是public static final的变量,即使在定义过程中并没有显示指定,也会被默认指定为public static final类型。而方法则只能定义为public abstract,当然同样即使没有定义为相关类型,默认均会添加。但是不能将其定义为private、protected等类型,编译时就会报错。

    可以通过观察生成的二进制文件来进一步确认一下相关配置。

    代码实例如下:

    interface InterfaceName
    {
       String str = "test"; 
       
       void method1();
    }

    然后,我们通过Javap工具查看生成的二进制内容(Javap -verbose InterfaceName)详细确认一下,最后生成的内容。

    警告: 二进制文件InterfaceName包含test.InterfaceName
    Classfile /D:/z00364813/dev/test/bin/test/InterfaceName.class
      Last modified 2018-2-1; size 205 bytes
      MD5 checksum e5b89eb5161832de38178e8af05b89b8
      Compiled from "InterfaceName.java"
    interface test.InterfaceName
      minor version: 0
      major version: 52
      flags: ACC_INTERFACE, ACC_ABSTRACT
    Constant pool:
       #1 = Class              #2             // test/InterfaceName
       #2 = Utf8               test/InterfaceName
       #3 = Class              #4             // java/lang/Object
       #4 = Utf8               java/lang/Object
       #5 = Utf8               str
       #6 = Utf8               Ljava/lang/String;
       #7 = Utf8               ConstantValue
       #8 = String             #9             // test
       #9 = Utf8               test
      #10 = Utf8               method1
      #11 = Utf8               ()V
      #12 = Utf8               SourceFile
      #13 = Utf8               InterfaceName.java
    {
      public static final java.lang.String str;
        descriptor: Ljava/lang/String;
        flags: ACC_PUBLIC, ACC_STATIC, ACC_FINAL
        ConstantValue: String test
    
      public abstract void method1();
        descriptor: ()V
        flags: ACC_PUBLIC, ACC_ABSTRACT
    }
    SourceFile: "InterfaceName.java"

    接口是可以被多次实现的,这是由于抽象类的特性。如果一个非抽象类继承了某一个接口,则必须实现所有的方法。

    抽象类

    在Java中实现抽象方法形式:

    public abstract class TestAbstract
    {
        abstract void function();//非必须存在
    }

    通过其实现形式,可以看出,包含抽象方法的类一定是抽象类,但是反之,则不是必须的。

    抽象类与普通类的对比:

    1、抽象类方法必须定义为public 或者protected,因为抽象类不能实例化,如果定义private方法,则无法使用该方法。

    2、抽象类不能实例化。

    3、一个类如果继承抽象类,则子类必须继承父类的抽象方法,如果没有实现,则子类也必须为抽象类。

    抽象类与接口的区别

    1、抽象类可以实现方法细节,但接口只能定义public abstract方法。

    2、抽象类中的属性则可以是各种类型的,但是接口中只能是public static final类型。

    3、接口中不能有静态代码块以及静态方法,但是抽象类则可以存在。

    4、一个类只能继承一个抽象类,但是可用实现多个接口。

    参考链接:

    https://www.cnblogs.com/KingIceMou/p/7235649.html

  • 相关阅读:
    Java 类和Static关键字
    算法与数据结构实验题 6.4 Summary
    Django-----vue结合上传图片
    Django----模板继承&过滤器
    Django-----多对多示例查询
    Django-----验证码
    Django-----序列化--jwt
    Django-----文件配置
    Django-----删除--批量删除
    Django-----图文混排
  • 原文地址:https://www.cnblogs.com/woniu4/p/8398037.html
Copyright © 2011-2022 走看看