Java接口多态

一、接口

  1. 接口概述
    a. 接口是什么
    公共的规范标准。把要做什么和怎们做进行了分离。
  2. 接口定义的基本格式
    a. 接口是什么数据类型:
    引用数据类型
    b. 如何定义接口
    public interface 接口名{}
    c. 接口中可以包含哪些内容
    JDK7:常量、抽象方法
    JDK8:常量、抽象方法、默认方法、静态方法
    JDK9:常量、抽象方法、默认方法、静态方法、私有默认方法、私有静态方法
  3. 接口的抽象方法定义和使用
    语法:
    public abstract 返回值类型 方法名(参数列表); //public abstract可以省略

注意事项:
a. 接口不能实例化,接口没有构造方法
b. public class 实现类 implements 接口{}
c. 实现类必须覆盖重写接口的所有抽象方法,除非实现类是抽象类
d. 一个类只能继承一个直接父类,但是可以实现多个接口。(单继承,多实现)
public class 实现类 implements 接口1,接口2,…{}
4. 接口默认方法的定义和使用
语法:
public default 返回值类型 方法名(参数列表){} //public可以省略

作用:
解决接口升级问题。

注意事项:
a. 实现类可以覆盖重写默认方法,也可以不覆盖重写。
b. 如果实现类覆盖重写了该默认方法,那么调用覆盖重写以后的。
c. 如果实现类没有覆盖重写该默认方法,那么调用接口中的默认方法
5. 接口静态方法的定义和使用
语法:
public static 返回值类型 方法名(参数列表){}

使用:
只能通过 接口名.静态方法(参数列表);方式调用。
6. 接口中私有方法的定义和使用
语法(普通私有):
private 返回值类型 方法名(参数列表){}
作用:
解决接口中多个默认方法代码重复问题

语法(静态私有):
private static 返回值类型 方法名(参数列表){}
作用:
解决接口中多个静态方法代码重复问题

注意事项:
私有方法只能在本类/接口中使用
7. 接口的常量定义和使用
接口中的变量就是静态常量。

语法:
public static final 数据类型 变量名 = 对应类型的值;

使用:
接口名.常量名;

注意事项:
final:被final修饰的变量就是静态常量,值不能变
被final修饰的方法不能被覆盖重写
被final修饰的类不能被继承
常量名命名规则:单词全部大写,如果有多个单词则用下划线连接

  1. 继承父类并使用接口
    语法:
    public class 类名 extends 父类 implements 接口1,接口2{

}

注意事项:
a. 接口没有静态块,也没有构造方法
b. 一个类只能继承一个直接父类,但是可以实现多个接口
c. 实现类必须覆盖重写接口的所有抽象方法,除非实现类是抽象类

特殊记忆:
a. 多个接口中的抽象方法重复,只需覆盖重写一次
b. 多个接口中的默认方法重复,必须要覆盖重写一次
c. 父类中的方法和接口中的默认方法重复,优先使用父类的
9. 接口之间的多继承
a. 类和类是单继承
b. 类和接口是多实现
c. 接口和接口是多继承
public interface 接口1 extends 接口A,接口B{}

二、多态

  1. 多态的概述
    多态:一个对象的多种形态

  2. 多态的定义与格式
    多态的典型写法:
    父类 对象名 = new 子类();//父类类型指向子类对象
    接口类型 对象名 = new 实现类类型();//接口类型指向实现类对象

  3. 多态中成员变量的使用特点
    直接调用:等号左边是谁,就调用谁的成员变量,没有则向上查找

  4. 多态中成员方法的使用特点
    看new的是谁,就优先调用谁的方法,没有则向上找。

口诀:
变量:编译看左边,运行看左边
方法:编译看左边,运行看右边
5. 使用多态的好处
多态的典型应用场景:

  1. 父类类型/接口类型作为方法的参数
  2. 父类类型/接口类型作为方法的返回值

覆盖重写:
子类的返回值类型,等于父类方法返回值、或者是父类方法返回值类型的子类或实现类。

public class Fu(){

public Object show(){

return null;
}
}

public class Zi extends Fu{
public String show(){
return “”;
}
}
6. 多态的向上转型、向下转型
向上转型:
父类 对象名 = new 子类();
接口 对象名 = new 实现类();

向上转型:
子类 对象名 = (子类)父类类型对象;
实现类 对象名 = (实现类)接口类型对象;

向上类型转换注意事项:
a. 前提,本来就是这个类型的对象
b. 可能会发生类型转换异常
7. 用instanceof关键字进行判断
父类类型对象/接口类型的对象 instanceof 子类/实现类 //返回值是布尔值

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值