1、多态概述
多态是Java面向对象继封装、继承后的最后一个特征。
2、理解:
例如:学生,通过学生类确定确定是哪一个学生,就是通过父类,找到其对应的子类。
注意:多态的前提是有关系(子父类),没有关系找不到,且必须重写父类的方法
3、格式:
类名 对象名=new 子类名();
通过父类对象指向子类方法、属性。称(向上转型)
子类名 对象名 = (子类名)父类对象;
通过子类对象,指向父类方法、属性,因为我们不知道它们是否有关系,所以我们引出instanceof关键字,判断是否能进行转型。称(向下转型(强转))
4、instanceof:
主要用于向下转型,返回类型为布尔类型。
5、多态特点:
编译看作,运行看右。
举例:通过一个小的继承,可以看出,如果不继承,在编译的时候就会报错
public class PolymorphismTest {
public static void main(String[] args) {
// 向上转型
// ----------------------------------------------------------------
// 这就是多态,左边是父类,右边是子类创建一个对象
Polymorphism1 pp=new Polymorphism2();
// 编译时看左边,pp是父类对象,.show():是子类重写父类的方法
// 通过父类的对象,指向子类的重写方法
pp.show();
// ----------------------------------------------------------------
// 向下转型,
// ----------------------------------------------------------------
// 强转,跟int数据类型转byte数据类型的格式相似
// int num1=100;
// byte num2=(int)num1;
// Polymorphism3 pp2 = (Polymorphism3)pp; //报错,因为,Polymorphism3不是Polymorphism1的子类
Polymorphism2 pp2 = (Polymorphism2)pp;
pp2.show();
// 简单我们可以直接看的出来,但是很多时候我们是不确定的,这时候就要引入instanceof关键字了
// **********************************************
// instanceof返回值是布尔类型的数据
if(pp instanceof Polymorphism2){
// 如果为真就强转
Polymorphism2 pp3 = (Polymorphism2)pp;
pp3.show();
}
// ----------------------------------------------------------------
}
}
class Polymorphism1{
public void show(){
System.out.println("我是父类");
}
}
class Polymorphism2 extends Polymorphism1{
// 重写父类里的方法
public void show(){
System.out.println("我是子类(1)的方法");
}
}
class Polymorphism3{
// 重写父类里的方法
public void show(){
System.out.println("我是子类(2)的方法");
}
}