关于接口类的静态方法,在实现类的重写问题

来源:1-9 接口成员--默认方法&静态方法

ExcelYourself

2021-08-25 15:01:21

视频提及到接口的静态方法不能在实现类中被重写

package com.imooc.telephone;


//接口访问修饰符:public 、默认

public interface INet {

//接口中的抽象方法可以不写abstract关键字

/*

* void 前面不写public,系统默认为public,调用INet接口时,

* 重写的方法必须是public,否则报错,原因是子类的方法重写访问权限必须大于或等于父类权限

*/

//当类实现接口时,需要去实现接口中的所有抽象方法,否则该类必须设置为抽象类

public void network();

//接口中可以包含常量,默认为 public static final

public static final int TEMP =20;

//default:默认方法,可以带方法体

default void connection() {

System.out.println("我是接口中的默认链接");

}

//静态方法可以带方法体

static void stop() {

System.out.println("我是接口中的静态方法");

}

}


package com.imooc.telephone;


public class Camera implements IPhoto,INet {

public static final int TEMP =30;

@Override

public void photo() {

System.out.println("相机可以拍照");

}

@Override

public void network() {

// TODO Auto-generated method stub

}

@Override

//INet接口的默认方法重写

public void connection() {

INet.super.connection(); //INet默认方法调用

INet.stop(); //调用INet的静态方法

}

public static void stop() {

}


}

可在实现类中对接口INet的静态方法进行重写,程序并没有报错,这是为何呢?

写回答

1回答

好帮手慕小尤

2021-08-25

同学你好,1、静态方法是无法进行重写的,静态方法只能被隐藏。隐藏指的是子类把父类(接口)的属性或者方法隐藏了,即将子类强制转换成父类(接口)后,调用的还是父类的属性和方法。

2、具体是否是重写的方法,同学可以使用@Override注解进行分辨,如果是重写可以使用@Override注解,否则会出现编译性异常。如下所示:

http://img.mukewang.com/climg/6125f74e095ba57308210304.jpg

祝学习愉快!

1

0 学习 · 9886 问题

查看课程