【Java 面向对象】快速学习接口(引用类型)、三大特征之多态、引用类型转换

根据课程图文做的笔记,供复习

1. 接口(引用数据类型:数组、类、接口)

1.1 接口的含义

接口(方法的集合)interface
抽象方法>JDK7 成员变量
默认方法和静态方法>8 构造方法
私有方法>9 成员方法
不能创建对象,可以被实现implements。实现接口的类可以看作接口的子类 可以创建对象,继承

在这里插入图片描述
实现接口的类必须实现接口的所有抽象方法 —> 创建该类对象,就可以调用方法
如果不实现接口的所有抽象方法 = 有方法没有函数体 = 有抽象方法 = 必须抽象类

1.2 接口的定义格式

public interface InterfaceDemo {
    
    
    //抽象方法 关键字可省略  没有方法体,供子类实现使用
    public abstract void abstractMethod();
    
    //默认方法 供子类调用或者子类重写
    public default void defaultMethod(){
    
    
        System.out.println("1");
    };
    
    //静态方法 供接口直接调用
    public static void staticMethod(){
    
    
        System.out.println("2");
    }
    
    //私有方法 JDK9
    //private void method(){}
}

1.3 接口的实现

实现接口的类可以称为接口的实现类,也可以称为接口的子类

  • 抽象方法
    • 必须重写
  • 默认方法
    • 可以直接调用也可以重写,但只能通过实现类的对象来调用
    • 直接调用:实现类里面直接继承接口的方法,只需要创建实现类的对象调用就好
    • 重写:实现类重写方法,创建的对象调用实现类的方法内容
  • 静态方法
    • 无法重写
    • 与class文件相关,只能通过接口名调用
    • 不可以通过实现类的类名和实现类的对象调用
  • 私有方法:只有默认方法可以调用
    • 私有静态方法:默认方法和静态方法可以调用
    • 一般如果接口中有多个默认方法的内容重复,可以抽取出来封装到私有方法里面,供默认方法调用。

1.4 接口的多实现

  • 一个类只能继承一个父类
  • 一个类可以实现多个接口
  • 一个类可以继承一个父类日,同时实现多个接口
    在这里插入图片描述
  • 抽象方法:
    • 如果实现多个接口中有同名的多个抽象方法,在实现类中只需要重写一次
  • 默认方法:
    • 实现的接口里面有重名的默认方法时,必须重写此默认方法,只需要一次
    • 没有重名,实现类都可继承调用
  • 静态方法:
    • 同名的静态方法并不冲突
    • 只能通过接口名.静态方法名()调用

如果一个类继承的父类的成员方法和接口中默认方法 重名时,子类会就近选择执行父类的成员方法

1.5 接口的多继承

  • 使用extends关键字,一个接口能继承另一个或者多个接口。
  • 子接口继承父接口的方法,如果父接口的默认方法中有重名的,子接口需要重写一次
  • 子接口重写默认方法时可以保留default关键字
  • 子类重写默认方法时,不可以保留default关键字

2. 多态

2.1 定义

多态:同一行为,具有多种不同的表现形式
跑:慢跑、快跑
飞:有高有低,有快有慢,形态不同

2.2 多态的前提

  1. 继承或者实现
  2. 重写方法
  3. 父类引用指向子类对象

2.3 多态的形式体现

父类类型(接口/父类)变量名 = new 子类对象;
变量名.方法名();
如Collection是List接口的父接口, ArrayList类实现了List接口

    Collection<String> coll = new ArrayList<String>();
    coll.add("小");

使用多态形式调用方法时,

  • 先检查父类中是否有该方法,没有则编译错误
  • 有的话,执行子类重写后的方法
    在这里插入图片描述

2.4 多态的好处

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
父类类型接收子类对象,并把子类对象传递给方法。
当方法被执行时,多态规定执行子类重写的方法,所以一个方法可以代替多个方法,而且在子类增加时,这种方法也不用再次编写。

2.5 引用类型的转换

2.5.1 向上转型

多态本身:子类类型向父类类型向上转换,默认就是向上转型
向上转型:父类引用一个子类对象
在这里插入图片描述

2.5.2 向下转型

向下转型:父类类型向子类类型向下转换(强制)
已经向上转型的子类对象,将父类引用转为子类引用,使用强制类型转换
在这里插入图片描述

2.5.3 转型的原因

用多态方式调用方法时,首先检查父类是否有方法,也就是不能调用子类有父类没有的方法,会直接编译错误,无法运行。如果想要调用子类的特有方法,必须向下转型。
在这里插入图片描述
在这里插入图片描述

扫描二维码关注公众号,回复: 13539835 查看本文章

2.5.4 转型异常 instanceof

在这里插入图片描述
类型转换异常:创建了Cat类型对象,将它转换成Dog对象
。这两个类并没有什么继承关系,不可以类型转换

使用 instanceof关键字,对引用变量做类型校验
在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_44121966/article/details/120043857