|NO.Z.00070|——————————|BigDataEnd|——|Java&多态特殊类.V11|——|Java.v11|抽象类|接口|主要区别|
一、抽象类和接口的主要区别
### --- 抽象类和接口的主要区别(笔试题)
~~~     ——>        定义抽象类的关键字是abstract class,而定义接口的关键字是interface。
~~~     ——>        继承抽象类的关键字是extends,而实现接口的关键字是implements。
~~~     ——>        继承抽象类支持单继承,而实现接口支持多实现。
~~~     ——>        抽象类中可以有构造方法,而接口中不可以有构造方法。
~~~     ——>        抽象类中可以有成员变量,而接口中只可以有常量。
~~~     ——>        抽象类中可以有成员方法,而接口中只可以有抽象方法。
~~~     ——>        抽象类中增加方法时子类可以不用重写,而接口中增加方法时实现类需要重写(Java8以前的版本)。
~~~     ——>        从Java8开始增加新特性,接口中允许出现非抽象方法和静态方法,但非抽象方法需要使用default关键字修饰。
~~~     ——>        从Java9开始增加新特性,接口中允许出现私有方法。二、编程代码
package com.yanqi.task09;
public interface Runner {
    // 自定义抽象方法描述奔跑的行为
    public abstract void run();
}三、编程代码
package com.yanqi.task09;
// 接口只能继承接口,不能继承类
public interface Hunter extends Runner {
    // 自定义成员方法描述捕猎的行为
    public abstract void hunt();
    // 将两个默认方法中重复的代码可以提取出来打包成一个方法在下面的两个方法中分别调用即可
    private void show() {
        System.out.println("在以后的开发中尽量减少重复的代码,也就是减少代码的冗余!");
    }
    // 增加一个抽象方法
    //public abstract void show1();
    // 增加非抽象方法
    public default void show1() {
        show();
        //System.out.println("在以后的开发中尽量减少重复的代码,也就是减少代码的冗余!");
        System.out.println("show1方法中:这里仅仅是接口中的默认功能,实现类可以自由选择是否重写!");
    }
    // 增加非抽象方法
    public default void show2() {
        show();
        //System.out.println("在以后的开发中尽量减少重复的代码,也就是减少代码的冗余!");
        System.out.println("show2方法中:这里仅仅是接口中的默认功能,实现类可以自由选择是否重写!");
    }
    // 增加静态方法 隶属于类层级,也就是接口层级
    public static void test() {
        System.out.println("这里是静态方法,可以直接通过接口名.的方式调用,省略对象的创建");
    }
}四、编程代码
package com.yanqi.task09;
public class Man implements Hunter {
    @Override
    public void hunt() {
        System.out.println("正在追赶一直小白兔...");
    }
    @Override
    public void run() {
        System.out.println("正在被一直大熊追赶,玩命奔跑中...");
    }
    @Override
    public void show1() {
        System.out.println("为了给你几分薄面,我决定重写一下!");
    }
    public static void main(String[] args) {
        // 1.声明接口类型的引用指向实现类的对象,形成了多态
        Runner runner = new Man();
        runner.run();
        Hunter hunter = new Man();
        hunter.hunt();
        System.out.println("-----------------------------------------");
        // 2.可以使用接口名称.的方式调用接口中的静态方法
        Hunter.test();
    }
}五、编译打印
D:\JAVA\jdk-11.0.2\bin\java.exe "-javaagent:D:\IntelliJIDEA\IntelliJ IDEA 2019.3.3\lib\idea_rt.jar=53615:D:\IntelliJIDEA\IntelliJ IDEA 2019.3.3\bin" -Dfile.encoding=UTF-8 -classpath E:\NO.Z.10000——javaproject\NO.H.00001.javase\javase\out\production\javase com.yanqi.task09.Man
正在被一直大熊追赶,玩命奔跑中...
正在追赶一直小白兔...
-----------------------------------------
这里是静态方法,可以直接通过接口名.的方式调用,省略对象的创建
Process finished with exit code 0Walter Savage Landor:strove with none,for none was worth my strife.Nature I loved and, next to Nature, Art:I warm'd both hands before the fire of life.It sinks, and I am ready to depart
                                                                                                                                                   ——W.S.Landor
 
                    
                 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号