接口5-10 重名常量问题
根据课程可知,接口和父类有重名常量,子类不需要打印调用等操作的话,子类是可以不用去重新定义的,不是必须的。这不像多个接口有重名默认方法,就一定得在实现类去重写,不然就是错误。
1、老师,父类有与接口的重名常量,子类难道就不能默认继承,什么错误都没有吗?难道父类的常量,子类继承不了?
2、多个接口有重名常量,实现类是会默认继承接口的属性和方法的,这时候实现类是不是就不会去继承任何一个接口的常量?
正在回答 回答被采纳积分+1
同学你好,1、非常抱歉这里老师的第一个代码有问题,没有重名变量的情况下,还是会继承的,但是一旦有了重名变量,还是需要在子类中定义一下,例如:
有重名变量,程序报错(JVM会不知道到底调用的是哪个x)
没有重名变量
程序就不报错了!
2、当接口的默认方法与父类方法同名时,默认指向父类中的方法,在课程5-9的5分58秒后都讲的是这段内容哦
interface One { int x = 11; } interface Two { final int x = 22; default int getData(){ return 10; } } class Three { final int x = 33; public int getData(){ return 100; } } public class TestOne extends Three implements One,Two { public static void main(String[] args) { TestOne one = new TestOne(); Two two = new TestOne(); System.out.println(one.getData()); System.out.println(two.getData()); } }
输出结果为
父类中的100!
如果我的回答解决了你的疑惑,请采纳,祝学习愉快~
同学你好,
1、父类的常量子类继承了,但是由于接口也实现了这个类,所以将这个常量覆盖掉了。
例如:
Animal类中定义a常量
IFly接口中定义一个同名a常量
Bird类继承Animal类然后实现IFly接口
测试类获取Bird类的这个常量
输出结果为:接口中定义的值1
public class Bird extends Animal implements IFly 根据这个代码的执行顺序,先继承在Animal类的a常量,之后实现IFly接口中也有a常量,JVM会自动帮我们覆盖掉之前的继承的a常量。也就只能获取到这个实现类的a常量。
2、你的理解是正确的,我们可以使用代码去实现一下同学的问题
例如:
IFly接口有一个a常量值为1
IPlay接口中,有一个a常量,值为8
Bird类实现IFly和IPlay两个接口
Test类中调用这个常量,是会报错的,原因是a常量的调用的模糊不清的,Java不知道掉用的是哪个接口的常量。
如果我的回答解决了你的疑惑,请采纳!祝学习愉快!
- 参与学习 人
- 提交作业 3802 份
- 解答问题 11489 个
本阶段带你迈入Java世界,学习Java必备基础知识,基础语法、面向对象思想以及常用工具类的使用。
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星