接口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 星