关于Java继承隐藏的理解

定义

如果在子类中对从父类继承来的成员变量进行重新定义,即出现了子类变量对父类变量的隐藏

隐藏的问题

设定A为父类,B为子类,当B的对象调用父类里面的方法(就是子类里面没有进行重写的方法),且方法里面用到了出现隐藏的变量,则该方法只会调用父类里面的参数变量,不会调子类里面重定义的变量。

 

和重写比较

重写是针对方法而言的,隐藏是针对变量而言。

在子类中,如果子类重写了父类的方法,那么子类在调用时会用重写的方法,即使子类调用父类的方法f方法(这个父类方法里面调用了有被子类重写的方法f1方法),f方法在调用f1时,会用重写后f1。当f调用被子类隐藏的变量(即被子类重定义的参数),会调用父类里面的变量,f1会调用子类重定义的变量。

 

所以:子类继承的方法,只能操作子类继承和隐藏的成员变量。(今天看到的一道面试题)

 

下面段网上的代码帮助理解:

 

publicclass Main {

 

    publicstaticvoid main(String[] args) {

       A a = new A();

       a.printOut();

       System.out.println("------------------------------");

       B b = new B();

       b.printOut();

       System.out.println("------------------------------");

       b.show();

       System.out.println("------------------------------");

       a = b;

       a.printOut();

    }

}

class A{

     inti = 0;

    publicvoid doAdd(){

       i++;

       System.out.println("A.i相加");

    }

    publicvoid printOut(){

       this.doAdd();

       System.out.println("A:"+i);

    }

}

class B extends A{

    publicinti = 0;

    publicvoid doAdd(){

       i+=2;

       //super.i+=2;

       System.out.println("B.i相加");

    }

    publicvoid show(){

       System.out.println(i);

    }

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

西门吹水之城

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值