关于接口类的静态方法,在实现类的重写问题
来源: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回答
同学你好,1、静态方法是无法进行重写的,静态方法只能被隐藏。隐藏指的是子类把父类(接口)的属性或者方法隐藏了,即将子类强制转换成父类(接口)后,调用的还是父类的属性和方法。
2、具体是否是重写的方法,同学可以使用@Override注解进行分辨,如果是重写可以使用@Override注解,否则会出现编译性异常。如下所示:
祝学习愉快!
相似问题