第10节一点问题

第10节一点问题

1、本节有三个代码,第一个代码错在多接口的重名抽象方法得在实现类重写,不然报错。但是这里是常量int x;,不是方法。解决办法是分别用One.x和Two.x调用多接口各自的常量x,老师,能不能在实现类里直接重写一个x,像是重写方法那样解决重名常量的问题?

2、课程里讲,父类的成员属性和多接口的常量同名,哪怕父类自己也是public static final修饰的常量,只要名字相同,不管是变量还是常量,都统统得在实现类里重写,为什么?


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

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

2回答
好帮手慕阿莹 2019-05-25 20:14:15

1、

但我问的第一个问题是:是多接口的重名静态常量在实现类里能不能重写? 我看老师在发给我的代码里,其实在实现类B里重写了常量TEMP=30,但是在调用时,是父类C或者接口A的引用指向B,你在注释写调的都是自己的,那么B重写的TEMP为什么调不出来,因为在实现类里重写的方法就可以被接口类引用或者父类引用指向实现类实例对象后,通过引用调用实现类的重写的方法啊?

回答:

1、在实现类中可以写与多接口中的静态常量重名的,但不能称之为重写。

2、B写的TEMP调不出来是因为我们用  c 或者 a 去调用的,如果想调用b 可以强转成B 类型的,或者

B b = new B(); 时,可以用b去调用。

而为什么调用属性时,就是调用父类或者接口自己的,调用方法时就是调用的子类重写的,这个是java语法的规定,同学这里记住就可以了,

3、其实同学现在有很多的猜想,同学可以自己来验证一下,而往往,现在的基础阶段,再往下就是比较底层的设计了,很多是语法规定,最为一名开发,要顺从底层实现,而不可以只跟着自己的思路走。基础阶段,同学还是要以记住规则为主呦,等同学掌握了java绝大部分知识,可以再回头研究一下底层。

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

好帮手慕小班 2019-05-24 21:09:17

同学你好,1、在多接口的出现重名的常量,接口中的变量都是静态的常量,可以直接通过类名.变量名来调用,java的就是这么设计的哦!这里老师也不能解释

2、目前是,接口或者父类调用属性时,调用的是自己的,所以要重写,调用方法时,调用的子类或者实现类的。目前同学先记住这个规则吧。

package com.imooc.sum;
public class B extends C implements A {    
    public static final int TEMP=30;
    public  static final int TEMP1=30;
     
    public void test() {
        System.out.println(22222);
    }
}
package com.imooc.sum;
 
public interface A {
    public static final int TEMP=20;
     
    default void test() {
        System.out.println(44444);
    }
}
package com.imooc.sum;
 
public class C {
    public static final int TEMP1=40;
     
    public void test() {
        System.out.println(11111);
    }
}
package com.imooc.sum;
 
public class Test {
    public static void main(String[] args) {
        // A 是接口
        A a = new B(); 
        //这里打印出来的就是接口中的常量
        System.out.println( a.TEMP);
        //而调用方法,会调用实现类里的方法
        a.test();
        //B实现了C,
        C c = new B();
        //这里打印出来的就是父类中的常量
        System.out.println(c.TEMP1);
        //而调用方法,会调用子类里的方法
        c.test();
         
    }
}

接口设计的目的就是为了数据的规范化和一种方法多种实现。这里同学先记住这样用!

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

  • 提问者 鱼儿0001 #1
    谢谢老师,但我问的第一个问题是:是多接口的重名静态常量在实现类里能不能重写? 我看老师在发给我的代码里,其实在实现类B里重写了常量TEMP=30,但是在调用时,是父类C或者接口A的引用指向B,你在注释写调的都是自己的,那么B重写的TEMP为什么调不出来,因为在实现类里重写的方法就可以被接口类引用或者父类引用指向实现类实例对象后,通过引用调用实现类的重写的方法啊?
    2019-05-25 14:35:46
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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