Java基础知识18:对象的多态

/**
 * 作者:hiyo585
 * 公司:hiyo design studios
 * 对象的多态
 * Java中多态性主要体现在1)方法的重载和覆写 2)对象的多态
 * 对象的多态性:
 * 1)向上转型:子类对象---->父类对象  (程序自动完成)
 * 2)向下转型:父类对象---->子类对象  (需要明确要转型的子类类型)
 *
 * 转换格式
 * 对象的向上转型:父类 父类对象 = 子类实例;
 * 对象的向下转型:子类 子类对象 = (子类)父类实例
 */

package com.hiyo.HighClass;

//对象向上转型的例子
class PolyA {
    public void method1() {
        System.out.println("PolyA---->method1") ;
    }
    public void method2() {
        this.method1();
    }
}
class PolyB extends PolyA {
    public void method1() {
        System.out.println("PolyB---->method1");
    }
    public void method3() {
        System.out.println("PolyB---->method3");
    }
}
class PolyC extends PolyA {
    public void method1() {
        System.out.println("PolyC---->method1");
    }
}

public class PolymDemo1 {
    public static void main(String[] args) {
        PolyB pb = new PolyB() ;
        PolyA pa = pb ;//发生向上转型
        pa.method1(); //调用子类覆写过的方法
        //PolyB---->method1
        //父类对象调用方法,实际上调用的是子类覆写过的方法
        //发生向上转型,所调用的方法肯定是被子类覆写过的方法

        pa.method2() ;
        //父类对象调用自己的方法
        //method2()中的this.method1(),this还是指子类对象

        //pa.method3() ;
        //method3只在子类中进行了定义,没有在父类中定义
        //无法用父类对象调用只在子类中定义的方法。
        //只在子类中定义的方法,必须用子类对象调用
        //或者父类对象采用向下转型。
        /*
        错误:(47, 11) java: 找不到符号
        符号:   方法 method3()
        位置: 类型为com.hiyo.HighClass.PolyA的变量 pa
         */
        ((PolyB)pa).method3() ;//向下转型
        //如果要调用子类自己的方法,只能用子类生命对象

        /*PolyA pa2 = new PolyA() ;
        PolyB pb2 = (PolyB)pa2 ;
        //向下转型失败
        //失败的原因,pa2和pb2之间没有建立关系,
        //pb2需要先向上转型
        //PolyA pa2 = new PolyB() ;
        pb2.method3();
         */

        //对象的多态实例
        PolyB pb3 = new PolyB() ;
        PolyC pc3 = new PolyC() ;
        mainMethod(pb3);
        mainMethod(pc3);
    }

    public static void mainMethod(PolyA pa) {
        pa.method1();
    }
}
/*
PolyB---->method1
PolyB---->method1
PolyB---->method3
PolyB---->method1
PolyC---->method1
 */

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值