多态及多态细节

多态
  • 前提:两个对象(类)存在继承关系

  • 多态的具体体现

一、方法的重载和方法的重写
二、对象的多态(重点,核心,难点)
  1. 一个对象的编译类型和运行类型可以不一致。
  2. 编译类型在定义对象时,就确定了,不能改变。
  3. 运行类型是可以变化的。
  4. 编译类型看定义时=号的左边,运行类型看=号的右边。
  5. 属性看编译类型,其他看运行类型
举个栗子

动物类

public class Animal {
    public void cry(){
        System.out.println("动物叫!!!");
    }
}

狗类

public class Dog extends Animal{
    @Override
    public void cry() {
        System.out.println("狗在叫!!!汪汪汪!!!");
    }
}

猫类

public class Cat extends Animal{
    @Override
    public void cry() {
        System.out.println("猫在叫!!!喵喵喵!!!");
    }
}

主类

public class PolyObject {
    public static void main(String[] args) {
        //animal的编译类型是Animal, Dog是运行类型。
        Animal animal = new Dog();
        animal.cry();//当运行到这行时,由于运行类型是Dog,所以输出Dog里的cry方法

        //编译类型是Animal(编译类型前面确定了,就不能改变。), Cat是运行类型。
         animal = new Cat();
         animal.cry();//当运行到这行时,由于运行类型是Cat,所以输出Cat里的cry方法
    }
}

请添加图片描述

三、多态细节(向上转型)

1.本质:父类的引用指向子类的对象

2.语法:父类类型引用名 = new 子类类型();

3.特点:3.1编译看左边,运行看右边。

​ 3.2可以调用父类中的所有成员(需遵守访问权限),但是不能调用子类的特有的成员。

四、多态细节(向下转型)

1.语法:子类类型 引用名 = (子类类型) 父类引用;
2.只能强转父类的引用,不能强转父类的对象
3.要求父类的引用必须指向的是当前目标类型的对象
4.可以调用子类类型中所有的成员

五、多态细节(属性)

属性没有重写的说法;属性的值直接看编译类型。

例:
public class main {
    public static void main(String[] args) {
        Person person = new Son(); //向上转型
        System.out.println("输入结果为:" + son.a); //看编译类型,类型为Person,所以输出 10
        
       System.out.println("======================");
       Son son = new Son(); 
        System.out.println("输入结果为:" + person.a); //看编译类型,类型为Son输出 20
    }

}

class Person{ //父类
    int a = 10; //属性
}

class Son extends Person{  //子类
    int a = 20; //属性
}

请添加图片描述

六、多态细节(instanceOf)

instanceOf比较操作符,用于判断对象的运行类型是否为XX类型或XX类型的子类型

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值