现在的位置: 首页 > 综合 > 正文

多态中重写与隐藏的区别

2013年08月24日 ⁄ 综合 ⁄ 共 684字 ⁄ 字号 评论关闭

首先,解释一下,有些书籍把重写也称为覆写

一,重写的方法调用由对象确定,也就是动态绑定,在运行时确定,一般被重写的是方法;

       隐藏的方法调用由引用确定,也就是静态绑定,在编译时确定,一般被隐藏的是属性或者静态方法,注意,隐藏属性的条件是子类中有和父类同名的属性即可,该属性的数据类型可以不同

二,父类的方法在子类中被重写后,不能用子类实例调用父类中被重写的方法,

       父类中的方法或者属性在子类中被隐藏后,可以用一个子类实例强制转换(向上转型)成父类类型,从而调用父类中被隐藏的属性或者方法

比如以下代码

class Cat{
	String field = "string";
	public void f1(){
		System.out.println("Cat f1");
	}
}
class WhiteCat extends Cat{
    int field = 5;
    public void f1(){
    	System.out.println("WhiteCat f1");
    }
}
public class Test {
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Cat cat = new WhiteCat();
		cat.f1();
		WhiteCat wcat = new WhiteCat();
		((Cat)wcat).f1();
		System.out.println(wcat.field);
		System.out.println(((Cat)wcat).field);		
	}
}
输出是
WhiteCat f1
WhiteCat f1
5
string

【上篇】
【下篇】

抱歉!评论已关闭.