JAVA的多态

1. 引用多态

父类的引用可以指向本类的对象

Animal obj1 = new Animal();

父类的引用可以指向子类的对象

Animal obj2 = new Dog();

2. 方法多态

创建本类对象时,调用的方法为本类方法

obj1.eat(); // 动物具有吃的能力

创建子类对象时,调用的方法为子类重写的方法或者继承的方法

obj2.eat(); // 狗具有吃的能力

3. 应用类型转换

3.1. 向上类型转换(隐式/自动类型转换),是小类型到大类型的转换

Dog dog = new Dog();

Animal animal = dog; // 自动类型提升 向上类型转换

3.2. 向下类型转换(强制类型转换),是大类型到小类型

Dog dog2 = (Dog)animal; // 向下类型转换 强制类型转换

3.3. instanceof运算符,来解决引动对象的类型,避免类型转换的安全性问题

if (animal instanceof Cat) {

    Cat cat = (Cat)animal;

} else {

    System.out.println("无法进行类型转换");

}

4. 抽象类

4.1. 语法定义

使用abstract关键字修饰

public abstract class *** {...}

public abstract void ***() ;

继承后的实现

@Override

public void ***() {...}

4.2. 应用场景

4.2.1. 在某些情况下,某个父类只是知道子类应该包含怎样的方法,但无法准确知道这些子类如何实现这些方法。

4.2.2. 从多个具有相同特征的类中抽象出一个抽象类,以这个抽象类作为子类的模板,从而避免了子类设计的随意性。

4.3. 作用

限制规定子类必须实现某些方法,但不关注实现细节

4.4. 使用规则

4.4.1. abstract定义抽象类

4.4.2. abstract定义抽象方法,只有声明,不需要实现

4.4.3. 包含抽象方法的类是抽象类

4.4.4. 抽象类中可以包含普通的方法,也可以没有抽象方法

4.4.5. 抽象类不能直接创建, 可以定义应用变量

5. 接口

5.1. 概念

接口可以理解为一种特殊的类,由全局变量和公共的抽象方法所组成。

类是一种具体实现体,而接口定义了某一批类所需要遵守的规范,接口不关心这些类的内部数据,也不关心这些类里方法的实现细节,它只规定这些类里必须提供某些方法。

5.2. 定义

ininterface关键字定义接口

[修饰符] [abstract] interface 接口名 [extends 父接口1, 父接口2...] { // 修饰符建议使用public // abstract关键字可隐式的表示,即可写可不写

    零个到多个常量定义

    [public static final] // 修饰符可隐式表示

    零个到多个抽象方法的定义

    [public abstract] // 修饰符可隐式表示

}

5.3. 使用接口

一个类可以实现一个或多个接口,实现接口使用implements关键字。

[修饰符] class 类名 extends 父类 implements 接口1, 接口2, ...{...}

IPlayGame ip1 = new SmartPhone();

ip1.playGame();

原文地址:https://www.cnblogs.com/BlackList-Sakura/p/4323546.html