• Java新手小白入门篇 Java面向对象(七)


    Java新手小白入门篇 Java面向对象(知识点体系汇总)

    • 面向对象知识链接汇总,知识点体系(思维导图)

    Java新手小白入门篇 Java面向对象(一)

    • Java面向对象(第一天)类,对象,方法的重载,练习题

    Java新手小白入门篇 Java面向对象(二)

    • Java面向对象(第二天)构造方法,this关键字,内存结构初识,null,NullPointerException,引用类型数组(上),拓展,练习题

    Java新手小白入门篇 Java面向对象(三)

    • Java面向对象(第三天)引用类型数组(下),继承,super,向上造型(上),拓展,练习题

    Java新手小白入门篇 Java面向对象(四)

    • Java面向对象(第四天)向上造型(下),重写,访问控制修饰符,static关键字,拓展,练习题

    Java新手小白入门篇 Java面向对象(五)

    • Java面向对象(第五天)final,static final,abstract关键字(抽象方法,抽象类)

    Java新手小白入门篇 Java面向对象(六)

    • Java面向对象(第六天)成员内部类(不经常使用),匿名内部类(经常使用)

    Java新手小白入门篇 Java面向对象(七)

    • Java面向对象(第五天)接口,拓展(类与接口的关系,抽象类与接口的区别),练习题

    Java新手小白入门篇 Java面向对象(八)

    • Java面向对象(第八天)多态(对象的多态,行为的多态),拓展(面向对象)

    Java新手小白入门篇 Java面向对象(九)

    • Java面向对象(第九天)简单的内存结构,面向对象三大特征

    • Java新手小白入门篇系列持续更新中…


    一、接口

    1. 接口的概念

    接口和之前我们学过的类一样,也是一种数据类型,它同样是我们引用类型的一种,接口从功能的角度讲与我们的抽象类有些类似,都是抽象出一个或多个需要实现的功能。但是相较于抽象类来说,接口更像是一套规则和标准。
    概念和理解有些绕口,跳过并带着思考看下面的讲解:

    2. 接口格式

    interface 接口名 { // 代码实现... }

    3. 接口的特点

    • 通过 interface 关键字来定义接口
    • 通过 implements 让子类实现接口
      • 我们称这种子类叫 实现类
    • 接口中的访问控制修饰符默认都是 public
    • 接口中的成员变量默认都是静态常量
      • 可以省略 public static fianl
    • 接口中的方法都是抽象方法(JDK8之前)
      • 可以省略 public abstract
      • JDK8以后接口中支持static,default修饰的方法
        • public static void sayHi() {}
        • public default void sayHello() {}
    • 接口中没有构造方法
    • 接口突破了Java单一继承的局限性
    • 类与接口之间可以多实现(implements),接口与接口之间可以多继承(extends)
    • 接口是对外暴露的规则,是一种规范
    • 接口提高了程序的扩展性,降低了耦合性

    4. 接口练习

    4.1 定义接口,实现类
    // 接口
    public interface Inter {
    }
    
    // 实现类
    public class InterImpl implements Inter{
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    4.2 接口中的访问控制修饰符默认都是 public

    请添加图片描述

    4.3 接口中的成员变量默认都是静态常量

    案例一:
    请添加图片描述

    public interface Inter {
        int num1; // 报错,接口中的变量都是常量(静态),所以必须初始化
        int num2 = 5;
    }
    
    • 1
    • 2
    • 3
    • 4

    案例二:
    请添加图片描述

    public interface Inter {
        // int num1; // 接口中的变量都是常量(静态),所以必须初始化
        int num2 = 5;
    }
    public class InterDemo {
        public static void main(String[] args) {
            // 接口中的变量都是常量(静态),所以不能改变
            Inter.num2 = 10; // 报错
            // 接口中的变量都是常量(静态),所以通过类名点调用
            System.out.println(Inter.num2);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    4.4 接口中的方法都是抽象方法(JDK8之前)

    前提: 需要将 IDEA 项目的语言等级调整至JDK7及以下
    请添加图片描述

    public interface Inter {
        void say() {} // 报错,JDK7以前接口中的方法都是抽象方法,没有方法体
        void eat();
    }
    
    • 1
    • 2
    • 3
    • 4
    4.5 JDK8以后接口中支持static,default修饰的方法
    public interface Inter {
        
        void say();
        
        default void sayHi(){
        }
        
        static void sayHello() {
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    4.6 接口中没有构造方法

    请添加图片描述

    public interface Inter {
        Inter(){} // 报错,接口中没有构造方法
    }
    
    • 1
    • 2
    • 3
    4.7 类与接口之间可以多实现(implements)

    请添加图片描述

    public class InterImpl implements Inter1,Inter2{ }
    public interface Inter1 { }
    public interface Inter2 { }
    
    • 1
    • 2
    • 3
    4.8 接口与接口之间可以多继承(extends)

    请添加图片描述

    public interface Inter extends Inter1,Inter2 { }
    public interface Inter1 { }
    public interface Inter2 { }
    
    • 1
    • 2
    • 3

    二、拓展

    1. 类与接口之间的关系

    1. 类与类的关系

      • 继承关系,只支持单继承
      • A是父类 B是子类
        • class B extends A {}
        • B具备A所有的功能(除了父类的私有资源和构造方法)
        • 子类如果要修改原有功能,需要重写(方法签名与父类一致 + 权限修饰符 >= 父类修饰符)
    2. 类和接口的关系

      • 实现关系,可以多实现
      • class A implements B,C {}
      • A是实现类,B和C是接口
        • A拥有BC接口的所有功能,只是需要进行方法的重写,否则A就是抽象类
    3. 接口与接口的关系

      • 继承关系,可以单继承,也可以多继承
      • interface A extends B,C {}
      • ABC都是接口
        • A是子接口,具有BC接口的所有功能(抽象方法)

    2. 接口与抽象类的区别

    • 抽象类是由 abstract class 修饰的,接口是由 interface 修饰的,interface 需要被实现 implements,而 abstract class 需要被继承 extends
    • 抽象类中可以有成员变量,也可以有常量,接口中都是常量
    • 抽象类中可以有普通方法也可以有抽象方法,接口中都是抽象方法(Java8 以后可以有普通方法,但是普通方法必须由 static 或 default 修饰的
    • 抽象类中可以定义构造方法,接口中不能定义构造方法,但是都没有意思,因为不能被实例化
    • 抽象类中任何访问控制修饰符都可以,接口中访问控制修饰符只能为 public

    三、练习

    1. 判断对错,如果错了,说出为什么,怎么修改

    1.1 练习1:

    public interface Inter {
        int num;
    }
    
    • 1
    • 2
    • 3

    1.2 练习2:

    public interface Inter {
        int num = 5;
    }
    public class InterDemo {
        public static void main(String[] args) {
            Inter inter = new Inter();
            System.out.println(inter.num);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    1.3 练习3:

    public interface Inter {
        int num = 5;
    }
    public class InterDemo {
        public static void main(String[] args) {
            Inter.num2 = 10;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    1.4 练习4:

    public interface Inter {
        void say() { } 
    }
    
    • 1
    • 2
    • 3

    1.5 练习5:

    public interface Inter {  
        void say();    
        default void sayHi(){ }    
        static void sayHello() { }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    1.6 练习6:

    public class InterImpl implements Inter1,implements Inter2 { }
    public interface Inter1 { }
    public interface Inter2 { }
    
    • 1
    • 2
    • 3

    1.7 练习7:

    public interface Inter extends Inter1,extends Inter2 { }
    public interface Inter1 { }
    public interface Inter2 { }
    
    • 1
    • 2
    • 3

    1.8 练习8:

    public class Demo implements Inter extends AbstractClass { }
    public abstract class AbstractClass{ }
    public interface Inter { }
    
    • 1
    • 2
    • 3
  • 相关阅读:
    偶数科技:基于OushuDB的新一代云原生湖仓一体为企业助力
    LeetCode--151
    三、逻辑代数基础
    为什么这么多品牌迫切想要改变Logo?
    Linux移动文件夹(文件)到其他文件夹 / 复制到其他文件夹 【cp / mv命令】
    tensorflow 1.13 cpu win10 安装 + object_detection 环境搭建 + paddle OCR
    二十二、【形状工具组】
    Java常见面试题-11-MongoDb
    Scala 模式匹配和case类
    进程间的通信方式
  • 原文地址:https://blog.csdn.net/weixin_46030002/article/details/126430336