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

  • 相关阅读:
    【NOIP 2003】 加分二叉树
    【POJ 1655】 Balancing Act
    【HDU 3613】Best Reward
    【POJ 3461】 Oulipo
    【POJ 2752】 Seek the Name, Seek the Fame
    【POJ 1961】 Period
    【POJ 2406】 Power Strings
    BZOJ3028 食物(生成函数)
    BZOJ5372 PKUSC2018神仙的游戏(NTT)
    BZOJ4836 二元运算(分治FFT)
  • 原文地址:https://www.cnblogs.com/woniu4/p/8398037.html
Copyright © 2011-2022 走看看