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 ;

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


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值