关于接口的存在、接口的使用步骤、接口和类的关系、多态(向上造型、向下转型)、多态的好处、多态出现的前提的课程笔记

接口:

1.接口是引用数据类型,一种特殊的抽象类
2.接口中可以存在

​ a.所有版本 JDK1.7 抽象方法和静态常量

​ 静态常量
​ 命名规则:

​ //默认添加public static final

​ 全部大写,如果有单词拼接使用_进行拼接
​ ps: CASE_INSENSITIVE_ORDER

​ 构造方法:接口没有构造方法

​ 抽象方法

​ //默认添加public abstract

​ b. JDK1.8 静态方法 :static void 方法名()

//接口不是类,没有继承,所以没有静态方法
//in.m4();
//使用接口中的静态方法 接口名.方法名  调用
InterfaceA.m4();

​ 默认方法:default void 方法名()

​ 作用:功能的扩展

//默认方法
//实现类可以获得接口中的默认方法
//可以选择在实现类中重写
in.m3();

​ c. JDK1.9 私有方法:private void 方法名 ()

​ 实现代码复用

​ private void 普通私有方法作用:提取默认方法中的公共部分

​ private static void 静态私有方法作用:提取静态方法中的公共部分

package b_Interface;

/*
   实现类:
   public class InterfaceImpl extends Father implements InterfaceA,InterfaceB,InterfaceC{}
    1.一个类一定有唯一的父类, 可以有多个父接口
    2.实现多个接口, 将这些接口中所有的抽象方法都实现掉
    3.父类中有抽象方法, 也要实现掉
    4.如果多个接口中,有重复的抽象方法,实现一次即可
    5.如果多个接口中,有重复的default方法,必须要重写一个

 */
public class InterfaceTest {
    public static void main(String[] args) {
        InterfaceImpl in = new InterfaceImpl();
        //抽象方法
        in.abstractA();
        in.abstractB();
        in.abstractC();
        in.abstractABC();
        in.farher();

        //默认方法

        in.defaultA();
        in.defaultB();
        in.defaultC();
        //如果接口A和接口B中有相同的默认方法
        //必须重写默认方法,因为方法的实现不一样
        in.defaultABC();

        //静态方法
        //接⼝中,存在同名的静态⽅法并不会冲突,原因是只能通过各⾃接⼝名访问静态⽅法
        InterfaceA.staticA();
        InterfaceA.staticABC();

        InterfaceB.staticB();
        InterfaceB.staticABC();

        InterfaceC.staticC();
        InterfaceC.staticABC();

        //子类中可以使用什么方法
    /*
        1.独有的方法
        2.父类中继承过来的所有方法
        3.接口中的 默认方法 和 抽象方法
     */
    }
}
3.接口的使用步骤

​ a.接口不能new对象,需要有个实现类 实现接口

​ b.实现类中必须重写接口中所有的抽象方法

​ c.通过实现类调用方法

package d_interface;
/*
    Interface: 接口
    引用数据类型:
        数组/类/接口

    xx.java -> xx.class -> 本质上也是一个类
    所有版本: 抽象方法 和 静态常量
    JDK1.7版本以上  不止有抽象方法
    private/default

 */
public interface InterfaceA {
    //成员变量 - 默认添加 public static final
    //静态常量 -> 全大写,如果有单词拼接 使用_
    /*public static final*/ int A = 10;

    //抽象方法
    public abstract void m1();
    //普通方法不允许存在 - 抽象方法
    public void m2();
    //抽象方法
    abstract void m3();
    
    //最简化写法 - 开发最常用写法
    void m4();
    
    // 接口不是类 -> 没有父子类关系 -> 不可用
    //protected abstract void m5();

}

接口和类的关系

类和类(单继承):1v1 extends 继承

接口和类:先实现接口 再继承父类没有这种关系

类 和接口的关系:1 v n implements

接口和接口(多继承):1 v n

接口作为方法参数和返回值使用的情况:

1).接口作为方法参数使用:

​ 可以传所有实现类对象,所以具体使用的都是接口的实现类对象

2)接口作为返回值类型使用:

​ 可以返回所有实现类对象,所以具体返回的都是接口的实现类对象

多态:

一种事物 多种形态,称为多态;

1.向上造型:

父类型引用 指向 子类型对象

​ 接口类型 a = new 接口实现类对象()

​ 父类型 a = new 子类型()

编译时状态(编译器)= 运行时状态

编译时状态:

​ 决定了对象能调用哪些属性和方法

运行时状态:

​ 决定了对象最终能调用哪些方法(重写)

2.向下转型

(强制类型转换)

a.有可能出现的问题:

​ 不知道 引用 到底是什么类型

​ ClassCastException 类型转换异常

b.解决办法:

​ 转换之前先判断 引用

​ 实际上是不是要转换的类型对象

​ 引用(a) instanceof 子类型()

Animal c = new Cat();

if(d instanceof Cat){
    // java.lang.ClassCastException
    Cat cat =(Cat)d;
    cat.m1();
}

接口的多态形式

InterfaceA in1 = new InterfaceImpl();    向上造型
InterfaceImpl  in2 = (InterfaceImpl)in1;  向下转型

类的多态:

Animal d = new Dog();  向上造型  //创建一个动物类型的狗对象
Dog dog=(Dog)d;   向下转型
3.多态出现的好处:

​ 类型统一,规范代码,代码的复用性

4.多态出现的前提:

a.向上造型:在多态中需要将子类型的引用赋值给父类型对象

b.继承:必须存在父子类关系

c.重写:必须 子类重写父类中的方法

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值