javaSE_接口,多态

248 阅读3分钟

1. 接口(interface)

接口,是Java语言中一种引用类型,是方法的集合,如果说类的内部封装了成员变量、构造方法和成员方法,那么 接口的内部主要就是封装了方法,包含抽象方法(JDK 7及以前),默认方法和静态方法(JDK 8),私有方法 (JDK 9)。

  • jdk7及之前:抽象方法
  • jdk8: 默认方法和静态方法
  • jdk9: 私有方法 接口与类定义类似,它是通过关键字interface声明,它也会编译成.class文件,但是它是一种引用类型数据
引用数据类型:数组,类,接口。

通用格式,定义格式

public interface 接口名称 { 
// 抽象方法 jdk8之前
// 默认方法 jdk8
// 静态方法 jdk8
// 私有方法 jdk9
}

1.抽象方法

抽象方法:使用 abstract 关键字修饰,可以省略,没有方法体。该方法供子类实现使用

public interface InterFaceName { 
	public abstract void method(); 
}

2.默认和静态方法

  • 默认方法:使用 default 修饰,不可省略,供子类调用或者子类重写。(可以继承,可以重写,二选一,但是只能通过实现类的对象来调用。)
  • 静态方法:使用 static 修饰,供接口直接调用。
public interface InterFaceName { 
    public default void method() { 
       // 执行语句 
    }
    public static void method2() {
       // 执行语句
    } 
}

3.私有方法

私有方法:使用 private 修饰,供接口中的默认方法或者静态方法调用。( 静态与.class 文件相关,只能使用 接口名调用,不可以通过实现类的类名或者实现类的对象调用)

  • 私有方法:只有默认方法可以调用。
  • 私有静态方法:默认方法和静态方法可以调用。 如果一个接口中有多个默认方法,并且方法中有重复的内容,那么可以抽取出来,封装到私有方法中,供默认方法 去调用。从设计的角度讲,私有的方法是对默认方法和静态方法的辅助。同学们在已学技术的基础上,可以自行测 试。
public interface InterFaceName { 
	private void method() { // 执行语句 }
}

4. 接口实现类(implements)

  1. 必须重写接口中所有抽象方法
  2. 继承了接口的默认方法,即可以直接调用,也可以重写。

5. 接口其它特点

  • 接口中,无法定义成员变量,但是可以定义常量,其值不可以改变,默认使用public static final修饰。
  • 接口中,没有构造方法,不能创建对象。
  • 接口中,没有静态代码块。

2. 多态

面向对象三大特性:

  • 封装
  • 继承
  • 多态

多态: 是指同一行为,具有多个不同表现形式。

  1. 继承或者实现【二选一】
  2. 方法的重写【意义体现:不重写,无意义】
  3. 父类引用指向子类对象【格式体现】

1. 多态的好处

实际开发的过程中,父类类型作为方法形式参数,传递子类对象给方法,进行方法的调用,更能体现出多态的扩展 性与便利

2. 引用类型转换

  1. 向上转型
父类类型 变量名 = new 子类类型();
  1. 向下转型
子类类型 变量名 = (子类类型) 父类变量名;
  1. 为什么要转型?

    当使用多态方式调用方法时,首先检查父类中是否有该方法,如果没有,则编译错误。也就是说,不能调用子类拥有,而父类没有的方法。编译都错误,更别说运行了。这也是多态给我们带来的一点"小麻烦"。所以,想要调用子 类特有的方法,必须做向下转型

  2. 转型异常

    当2个类型之间没有任何继承关系,是不能做类型转换的,一般强转会报ClassCastException异常,所以一般先用 instanceof关键字做一下判断。

变量名 instanceof 数据类型 
如果变量属于该数据类型,返回true。 
如果变量不属于该数据类型,返回false