【Java基础】面向对象三个特征(3):多态

一、多态的概述

  多态:一个对象拥有多种形态

    eg:小明是一个学生(学生形态),同时也是一个人(人类形态)

  多态的格式与使用:父类引用指向子类对象

    格式:父类名称 对象名 = new 子类名称()

       接口名称 接口名 = new 实现类名称()

  多态中访问成员变量、成员方法:

    成员变量:编译看左边,运行看左边

    成员方法:编译看左边,运行看右边

  多态的好处:可以使程序有良好的扩展,并可以对所有类的对象进行通用处理

public class Demo01test {
    public static void main(String[] args) {

        //格式:父类引用指向子类对象
        Animal cat = new Cat();
        System.out.println(cat.num);

        //访问成员方法
        cat.eat();//父子都有,优先用子

        cat.run();//子类没有,父类有,向上找到父类
        //无法调用子类特有的方法
        // 编译看左边,左边是父类,父类没有这个方法,所有编译报错
        //cat.catchMouse();错误写法!!!
        
    }
}

 

二、向上、向下转型

  向上转型:

    格式(与多态的写法一致): 父类名称 对象名 = new 子类名称()

    含义:右边创建一个子类对象,但把它当做父类对象来看待使用;

    注意事项:向上转型一定是安全的(子类转向父类,子类小范围转向父类大范围)

  向下转型:

    格式:子类名称 对象名 = (子类名称) 父类对象

    含义:将父类对象,转向本来的子类对象

 

三、instanceof关键字

  通过此关键字,可以判断父类引用的对象本来属于哪个子类。

public class Demo02Test {
    public static void main(String[] args) {
        Animal animal = new Dog();
        judge(animal);
    }

    public static void judge(Animal animal){
        if (animal instanceof Cat){
            Cat cat = (Cat) animal;
            cat.catchMouse();
        }
        if(animal instanceof Dog){
            Dog dog = (Dog) animal;
            dog.breakHome();
        }
    }

 

posted @ 2020-07-17 00:18  蹲马路牙子吃炒面  阅读(120)  评论(0编辑  收藏  举报