搬家后的博客链接: IT客栈 www.itkezhan.org
java中的所谓的向上转型,目前的理解是。子类基本上转化为父类,唯一不同于父类的是,这个子类在调用父类方法的时候,如果原来子类中覆写了父类的方法,则转型后的子类会调用这个覆写的方法,而不会调用父类中那个被它覆写的方法。
例子:
class f{
public int book = 6;
public void base()
{
System.out.println("父类的普通方法");
}
public void test()
{
System.out.println("父类的被覆盖方法");
}
}
class c extends f{
public String book="java实例开发";
public void test()
{
System.out.println("子类的覆盖方法");
}
public void sub()
{
System.out.println("子类的普通方法");
}
}
public class test{
public static void main(String[] args)
{
f d = new c(); //向上转型
System.out.println(d.book); //这时候调用的是父类的属性,输出的是 6
d.base(); //调用了父类的方法,打印出了 “父类的普通方法”
d.test(); //由于test这个方法在子类(c)中被覆写,所以这个时候调用的是子类中的 test 方法;
//d.sub(); //子类向上转型了之后,基本上跟父类差不多,所以不能直接调用父类之外方法。由于这个sub不是属于父类,所以如果运行这句,编译会出错
}
}
总结:向上转型后的子类实例=父类实例的属性 + 父类实例没有被覆写的方法 + 子类覆写的方法。