重名常量的代码

重名常量的代码

interface One{

static int x=11;

}


interface Two{

final int x=22;

}


class Three{

public static final int x=33;

}


public class TestOne extends Three implements One,Two{

public void test(){

int x=44;

System.out.println(x);

}


public static void main(String[] args){

new TestOne().test();

}

}

老师,我把int x=44;写在了test方法里,运行成功。可是,两个接口和父类的x都是写在类里的,是成员变量,而int x写在方法里,是局部变量竟然也能运行成功,为甚么

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

5回答
好帮手慕阿满 2019-06-17 19:09:43

        同学你好,课程中是要输出x,该x不确定是父类中,还是某个接口中的x,所以需要定义子类中独有的x,才能正确输出。在同学代码中,并没有输出接口或者父类中的重名的变量,而是定义一个局部变量,并输出。如果同学没有定义局部变量,要求输出父类或者接口中的变量,就必须重写x。

        这两者的区别就在于同学输出的是方法中定义的局部变量还是父类或者接口中的重名变量,如果输出的是方法中的局部变量,没有用到父类或接口中的重名变量,就不需要定义。如果没有定义局部变量,而是输出父类或者接口中的重名变量,就必须重写。

如果我的回答解决了你的疑惑,请采纳。祝:学习愉快~

  • 提问者 鱼儿0001 #1
    好的,谢谢老师。我懂了,当我就是要输出接口与父类的重名变量x时,我才需要去重写自己的x。如果没有上面的要求,子类里完全不用去重写自己的x,对吗
    2019-06-17 19:15:54
  • 好帮手慕阿满 回复 提问者 鱼儿0001 #2
    可以这么理解。祝:学习愉快~
    2019-06-17 19:32:08
好帮手慕阿满 2019-06-16 19:10:39

同学你好,同学是在纠结x是定义在方法中,而不是在类中,也能运行成功是吗?同学可以理解为子类方法中的x和接口中的x没有关系,这里只是在方法中定义了一个变量,然后输出了该变量,只是该变量恰好命名为x。同学可以将子类方法中的x换成别的变量名来具体理解一下。

祝:学习愉快~

  • 提问者 鱼儿0001 #1
    好的,谢谢老师。你的意思是,子类方法里的变量和接口、父类重名变量没有任何关系,可是在课程里说,当接口、父类的变量重名时,得在子类里去重写,可是我没有重写还是运行成功,这是为什么
    2019-06-17 15:04:50
吃吃吃鱼的猫 2019-06-15 17:56:01

同学你好,父类与接口中定义的变量x在子类中是可以被继承到的,所以,x在子类中仍然看成为成员变量x,只是默认隐藏,此时成员变量x与局部变量x重名。

同学的问题不是成员变量x与局部变量x的重名问题吗?

如果我的回答解决了你的疑惑,请采纳。祝:学习愉快~

  • 提问者 鱼儿0001 #1
    老师啊,你的理解很有问题啊,我哪里问的是成员变量x与局部变量x的重名问题,是你觉得我在注意这里- -!父类与接口中定义的变量x在子类中是可以被继承到,但是子类继承的是谁的?三个重名的x子类继承谁的?是不是要在自己的类里去重写自己的x,但是我纳闷的是我没在类里去写,而是在类的方法里去写,怎么还能运行成功。
    2019-06-16 11:40:09
  • 提问者 鱼儿0001 #2
    子类继承谁的x,老师你告诉我,三个x子类继承谁的?课程里都告诉我们子类得自己亲自写一个自己的x,但是我在这段代码里没写,反而在方法写了一个x,还能运行成功,我纳闷的地方是在这里。
    2019-06-16 11:41:57
吃吃吃鱼的猫 2019-06-12 19:33:05

同学你好

1、变量x在实现类中默认隐藏。

2、成员变量与局部变量可以同名。

当成员变量和局部变量同时存在一个方法时,局部变量优先级高,如果此时想使用成员变量而不是局部变量,可以使用this关键字,用法是 this.变量名 。类似用法可以参考set方法。

如果我的回答解决了你的疑惑,请采纳。祝:学习愉快~

  • 提问者 鱼儿0001 #1
    老师你回答的是什么啊,看不懂。两个接口和父类的重名常量是定义在类里的,又不是在方法里,在子类里没有定义x,是在方法里定义了局部变量x,这跟你回答的:成员变量与局部变量可以同名。有什么关系。。。。。
    2019-06-15 15:05:54
吃吃吃鱼的猫 2019-06-12 18:26:08

同学哪里不明白呢?为什么不能运行成功呢?请详细描述一下问题,方便老师为同学解答。

祝:学习愉快~


  • 提问者 鱼儿0001 #1
    好的,谢谢老师的热心回复。我的问题是,两个接口和父类的常量x都是定义在类(或叫接口)里的,是成员属性,不是定义在一个方法里。可是,在实现类(或叫子类)里,在它的类里并没有定义一个成员属性x,而是在test方法里写了一个局部变量x。这怎么能算是为了解决接口与父类的重名常量冲突,而在子类去写自己的x呢?x应该被定义在类里而不是方法里。
    2019-06-12 19:16:18
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师