接口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