java继承1—上溯造型

1. 代码

package com.xiyou.janie.chap5;

public class Father {

	int i=1;
	public void f()
	{
		System.out.println("father");
	}
	public Father() {
		// TODO Auto-generated constructor stub
	}

}

package com.xiyou.janie.chap5;

public class Child extends Father{

	int i=14;
	public void f()
	{
		System.out.println("child");
	}
	public Child() {
		// TODO Auto-generated constructor stub
	}

} 
2.父类对象指向父类单元

         Father a=new Father();
        System.out.println(a.i);
        a.f();

   结果是 1

                father


3.子类对象指向子类单元

        Child a=new Child();
        System.out.println(a.i);
        a.f();

  结果是:14
                  child


4.父类对象指向子类单元  ------ 上溯造型

        Father a=new Child();
        System.out.println(a.i);
        a.f();


   结果是:1
                   child


产生这个结果的原因:

       子类定义与父类的同名变量,则对父类变量进行隐藏。(只要同名就隐藏,不管类型是否相同、是否都是类变量)

      子类定义一个方法,与父类的成员方法原型相同,则对父类方法进行覆盖。

      (要求: 返回类型、方法名、参数都完全一致;

                       子类方法的访问权限不能低于父类的权限;

                       子类方法不能比父类抛出更多异常;

            满足这些才能实现方法覆盖)


所以:

     对于父类来说,不知道子类是否有定义i 变量,所以只能输出自己的 i ;

    但是由于方法是被覆盖的,所以调用的还是子类的方法。


发布了31 篇原创文章 · 获赞 8 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weijie_home/article/details/49105871