Java(多态)

目录

运算符instanceof的用法

对象转型

多态

代码演示


运算符instanceof的用法

instanceof运算符:判断一个引用类型的变量所引用的对象是否是一个类的实例

一般形式:引用类型变量 instanceof 类

对象转型

1.引用类型变量的类型转换(对象转型)

子类类型和父类类型之间的转换关系

前提:存在继承关系(无继承关系的引用类型不能转换)

2.两种转换方式

向上转型:

子类给父类赋值(直接或间接方式)

父类类型引用变量指向子类对象

向下转型:

父类给子类赋值(直接或间接)

将父类对象强制转换为子类类型,强制类型转换(显示类型转换)

父类对象必须在子类对象中才能向下转型,否组运行期报错

可以用父类类型引用变量指向子类对象(里的父类对象),但是不能用子类类型引用变量直接指向父类对象

多态

多态:同样的消息被不同类型的对象接收导致不同的行为

必要条件:有继承(实现),有重写,使用父类引用指向子类对象(接口类型引用变量指向实现类对象)

一个引用类型变量声明为父类类型,引用子类对象,变量不能访问子类中独有的属性和方法

方法的绑定

建立方法调用和方法体之间的关联

静态绑定方法:编译时编译器就能准确地判断应该调用哪个方法(早绑定、先期绑定)

动态绑定方法:编译时检查语法,运行时判断所引用对象的实际类型,根据实际类型调用相应的方法(晚绑定、后期绑定)

编译时:根据引用变量类型,判定此类是否有此方法

运行时:判定引用变量指向的对象类型,根据此对象类型调用方法

代码演示

//IntanceofTest01
public class IntanceofTest01 {
    public static void main(String[] args) {
        Father father = new Father();
        Son son = new Son();
        //instanceof判断当前对象是不是由该类创建的
        System.out.println(father instanceof Father);//true
        System.out.println(father instanceof Son);//false
        System.out.println(son instanceof Father);//true
        System.out.println(son instanceof Son);//true
    }
}
class Father{}
class Son extends Father{}
//Student02
public class Student02 extends Person {
    public static void main(String[] args) {
        //对象类型之间也存在类型转换称之为对象转型
        //条件是必须要有继承关系,无继承,无转换
        //对象转换分为向上转型和向下转型
        //向上转型是:子类对象给父类的引用变量赋值,自动转换
        //向上转型的实质是:子类中小的父类对象给父类中的引用变量赋值
        //两种写法:第一种
        Person p1 = new Person();
        Student02 s1 = new Student02();
        p1 = s1; //子类对象给父类的引用变量赋值  p1 s1 都是对象名
        //第二种写法:
        Person p2 = new Student02(); //子类的对象直接给父类的引用变量赋值  new Student02()对象

        //向下转型:父类对象给子类的引用变量赋值,强制转换
        //向下转型要想用,需要保证父类对象在子类对象之中,也就是需要先进行向上转型
        Person p3 = new Student02();
        Student02 s3 = new Student02();
        s3 = (Student02)p3;

    }
}
class Person{}
//Demo03
public class Demo03 {
    public static void main(String[] args) {
        //多态:同样的消息被不同的对象接收产生不同的行为
        //多态的使用条件:继承、重写、向上转型
        Animal a1 = new Animal();
        Animal a2 = new Cat();
        Animal a3 = new Dog();
        a1.cry();
        a2.cry();
        a3.cry();
    }
}
class Animal{
    public void cry(){
        System.out.println("动物的叫声");
    }
}
class Cat extends Animal{
    @Override
    public void cry() {
        System.out.println("喵喵");
    }
}
class Dog extends Animal{
    @Override
    public void cry() {
        System.out.println("汪汪");
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值