Java三大特性之多态

转载请标明出处:http://blog.csdn.net/wu_wxc/article/details/51463306
本文出自【吴孝城的CSDN博客】

一个行为具有多种表现形式称为多态
如吹奏乐器,吹笛子和吹箫声音是不同的,同样是吹这个动作,作用在不同对象上产生不同的效果,这就是多态。吹这个动作的多态。

Java的引用变量有两个类型,编译时类型和运行时类型。
编译时类型由声明该变量时使用的类型决定,运行时类型由实际赋给该变量的类型决定,如果编辑时类型和运行时类型不一致,就可能出现多态。

多态的体现
方法的重载和重写
对象的多态性

如类A,类B
其中

B extends A

那么向上转型

A a = new B();

可以通过a调用父类方法,如果父类方法被重写,将调用重写后的方法

向下转型要先向上转型,再向下转型

A a = new B();
B b = (B)a;

可以通过b调用子类的方法,父类的方法,(因为子类继承父类,享有父类方法)

引用类型转换
1、向上类型转换(隐式/自动类型转换),由小类型转向大类型
2、向下类型转换(强制类型转换),由大类型转向小类型
3、instanceof运算符,用来解决类型转换的安全性问题

例子

package cn.wuxiaocheng;

class A {
    public void priA1() {
        System.out.println("priA1");
    }

    public void priA2() {
        System.err.println("priA2");
    }
}

class B extends A {
    // 重写父类的priA1()方法
    public void priA1() {
        System.out.println("重写priA1");
    }
    public void priB() {
        System.out.println("priB");
    }
}

public class Test {

    public static void main(String[] args) {
        // 向上转型
        A a = new B();
        a.priA1();
        a.priA2();

    }

}

这里写图片描述

package cn.wuxiaocheng;

class A {
    public void priA1() {
        System.out.println("priA1");
    }

    public void priA2() {
        System.err.println("priA2");
    }
}

class B extends A {
    // 重写父类的priA1()方法
    public void priA1() {
        System.out.println("重写priA1");
    }
    public void priB() {
        System.out.println("priB");
    }
}

public class Test {

    public static void main(String[] args) {

        // 向下转型要先向上转型,再向下转型
        A a2 = new B();
        B b = (B)a2;
        b.priA1();
        b.priA2();
        b.priB();

    }

}

这里写图片描述

当在进行类型转换时,如果类型不匹配时会出现异常,可以用instanceof来用避免类型转换时的安全性问题

package cn.wuxiaocheng;

class A {
    public void priA1() {
        System.out.println("priA1");
    }

    public void priA2() {
        System.err.println("priA2");
    }
}

class B extends A {
    // 重写父类的priA1()方法
    public void priA1() {
        System.out.println("重写priA1");
    }
    public void priB() {
        System.out.println("priB");
    }
}

public class Test {

    public static void main(String[] args) {

        A a1 = new A();
        System.out.println(a1 instanceof A);
        System.out.println(a1 instanceof B);

        A a2 = new B();
        System.out.println(a2 instanceof A);
        System.out.println(a2 instanceof B);
    }
}

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值