static方法可以被重写(覆盖)吗
发布网友
发布时间:2022-04-20 02:51
我来回答
共3个回答
热心网友
时间:2023-07-11 20:06
首先,static 修饰的方法可以去复写,但不会覆盖父类的方法。
重写:只有继承了父类的,才可以。 它具有以下特点:
1.参数列表必须与被重写的方法参数列表一致。
2.返回类型必须与方法中的返回类型一致。
3.访问级别的 *不可以比父类中的强。(可以比他弱)
重载:
在同一一个类中,参数与返回的只不同,方法名相同。
静态的:
由于静态的在内存空间只有一份,所有不可以被覆盖.
子类定义和父类的静态,其实是在子类中隐藏父类的静态方法..
子类隐藏父类的静态方法和子类覆盖父类实例方法还是有区别的.区别在:运行时..JAVA 虚拟机把静态方法和所属的类绑定,而把实例方法和所属的实例绑定...
举个例子让你更明白;
======
class Father{
void method(){
System.out.println("method of father");
}
static void staticMethod(){
System.out.println("static method of father");
}
}
public class Son extends Father{
void method(){
System.out.println("method of son");
}
static void staticMethod(){
System.out.println("static method of son");
}
public static void main(String args[]){
Father son1 = new Son();//声明为Father类,son1静态方法和Father类绑
定
son1.method();
son1.staticMethod();
Son son2 = new Son();
son2.method();
son2.staticMethod();
}
}
============
method of son
static method of father
method of son
static method of son
热心网友
时间:2023-07-11 20:07
不能复写,如下验证:
1,public class TT {
public static void getName(){
System.out.println("TT");
}
public static void main(String[] args) {
TT tt = new T();
tt.getName();
}
}
class T extends TT{
public static void getName(){
System.out.println("T");
}
}如果打印的是T则说明能复写。但实际上打印的是TT,说明不能复写。
方法2,在子类的public static void getName()中
写上super.getName();看是不是编译不通过。通过说明可复写。
方法3,eclipse中可以自动生成复写方法,在子类中如果可以就说明可以复写,如果不能自动生成复写方法,说明不能复写。
我的结论是不能复写。
你自己也试着验证看看吧。
热心网友
时间:2023-07-11 20:07
可以,staitc表示静态的,是在别的类调用后不能直接调用方法的意思。
final修饰的方法不能复写