拨开荷叶行,寻梦已然成。仙女莲花里,翩翩白鹭情。
IMG-LOGO
主页 文章列表 界面和抽象类是否有构造方法

界面和抽象类是否有构造方法

白鹭 - 2022-03-11 2138 0 0

先上结论:界面没有,抽象类可以有,

甚至于有其他的区别:


首先针对构造方法而言很好理解:

抽象类虽然内部的方法可以不用具体描述方法体,但是归根结底,抽象类其实是一个标准的类,它里面的内容完全可以按照一个标准的类进行描述,并且与一般类一样使用extends进行继承,在创建抽象类时,IDE会默认生成无参构造,你也可以自己定义,这些都是可以的;

界面则不一样,根据博主lllllzllll所言对界面的描述:

界面作为一种宣告,不需要进行初始化,所以根本不需要构造器对其进行构造,

其次针对方法体和静态方法:

这是看见上面所说的博主文章下面评论区说的,java8之后:

所以这个要看仔细,但其中有些注意点:

  1. 静态方法

    从java8开始界面里可以有静态方式,用static修饰,但是界面里的静态方法的修饰符只能是public,且默认是public

譬如:

interface Test{
    static void test1(){//不写public也可,默认为public
        System.out.println("静态方法");
    }
}

class TestClass{
    public static void main(String[] args){
        Test.test1();//与呼叫普通类的静态方法一致
    }
}
  1. 非静态方法

    java8里,除了可以在界面里写静态方法,还可以写非静态方法,但是必须用default修饰,且只能是public,默认也是public,这方法称为默认方法

interface Test{
    default void test1(){//不写public也可,默认为public
        System.out.println("默认方法");
    }//该方法需要实体化后呼叫,可使用匿名内部类进行实体化
}

最后,界面内的属性为啥都是public static final

查看了大佬徐明晓的文章:为什么界面中的成员变量非得是public static final的呢?

各自提到这三个修饰符的意义:

参考文章:

[1] 《Java中抽象类和界面中有构造方法吗?》 https://blog.csdn.net/qq_40728375/article/details/79890223 作者:lllllzllll

[2] 《java8新特性之函式式界面、lambda表达式、界面的默认方法、方法和建构式的参考》 https://blog.csdn.net/zymx14/article/details/70175746 作者:Howard_14

[3] 《为什么界面中的成员变量非得是public static final的呢?》 https://blog.csdn.net/weixin_43518038/article/details/107807340 作者:徐明晓

欢迎大佬们提出自己的想法!

标签:

0 评论

发表评论

您的电子邮件地址不会被公开。 必填的字段已做标记 *