第十章 多态

一、instanceof

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

一般形式:

引用变量 instanceof 类

例如:myObject instanceof Object

public static void main(String[] args) {
        Person p = new Person();
        Student s = new Student();
        //instanceof判断一个对象是否由该类创建的
        System.out.println(p instanceof Person);
        System.out.println(p instanceof Student);
        System.out.println(s instanceof Person);
        System.out.println(s instanceof Student);
    }

二、对象的类型转换

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

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

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

2.两种转换方式

向上转型:

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

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

(3)自动转换

向下转型:

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

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

(3)父类对象必须在子类对象之中才能向下转型,否则运行期报错

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

public class Demo {
    //引用类型之间也存在类型转换,称之为对象转型
    //对象转型分为向上转型,向下转型
    public static void main(String[] args) {
        //向上转型是父类的引用变量指向子对象(自动转换)
        //实质就是子类中小的父类对象给父类的引用变量赋值
        //第一种写法
        Student s1 = new Student();
        Person p1 = new Person();
        p1 = s1;
        //第二种写法
        Person p2 = new Student();
        //向下转型是子类的引用变量指向父类对象(强制转换)
        //要想向下转型,必须要保证父类对象在子类对象之中,而唯一能保证的就是向上转型
        Student s3 = new Student();
        Person p3 = new Student();
        s3 = (Student) p3;

    }

}

三、多态性

多态:同样的消息被不同类型的对象接收时产生不同的行为

多态的条件:

1.要有继承(实现)

2.要有重写

3.要有向上转型(接口类型引用变量指向实现类对象)/(使用父类引用指向子类对象)

四、方法的绑定

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

2.方法绑定(Binding):建立方法调用(Method Call)和方法体(Method Body)之间的关联

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

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

例:Animal myCat=new Cat();

       myCat.cry();

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

              判断Animal类中有cry()方法

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值