java 面向对象的多态性

        这些日子闲来无事看看 java,以前写 的那几篇类型转化的帖子 都是为了说明什么是面向对象的多态性。当然我学的东西都是从张孝祥老师的《java就业培训教程》学来的,张老师虽然去世了,但是他留下的书和视频,在我看来依然是每一个程序员的入门必选佳作。

        话要少说,事要多知,直奔主题,上代码。

class A{
	public void func1(){
		System.out.println("A func1 is calling");
	}
	public void func2(){
		func1();
	}
}

class B extends A{

	@Override
	public void func1() {
		System.out.println("B fun1 is calling");
	}
	public void func3(){
		System.out.println("B func3 is calling");
	}
	
}
public class C {
	public static void main(String args []){
		B b=new B();       //新建一个 b类对象
		A a=b;             //b类对象的地址传给一个a类引用类型变量
		callA(a);          //a应用传递给callA 
		callA(new B());    //直接把B对象做为一个A对象传递给函数
	}
	
	public static void callA(A a){
		a.func1();
		a.func2();
		
	}
}

    这个程序 的输出结果是:

    B func1 is calling

    B func1 is calling

    B func1 is calling

    B func1 is calling

    分析一下上面的过程:

    传递给callA()方法的引用a所指向的是一个B类型 的对象,所以这里调用的是B类型的func1(),func2()方法。如果传递给callA()方法的引用a 是真的指向一个A类型的对象,那么这里调用 的肯定是A类型的方法。这样的话在子类型向父类型转化的过程中我们实现了一种特殊的效果:使用父类型的引用来调用一个方法,如果引用指向的 是父类型的对象,那么调用的是父类型的方法;如果引用指向的是子类型的方法调用的就是子类型的方法 ,也就是说相同的输入却出现了不同的输出 ,这就是面向 对象的多态性。换种方式说,A是父类,B是子类,申请 一个B类的对象赋值给一个A类型的引用,这样以后就可以使用A来调用B中对A重写的 方法,也就是实现了向后兼容性。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值