java静态方法的重写,为什么不能?

JAVA静态方法形式上可以重写,但从本质上来说不是JAVA的重写。因为静态方法只与类相关,不与具体实现相关,声明的是什么类,则引用相应类的静态方法(本来静态无需声明,可以直接引用),看下例子:

Java代码  

  1. class Base{
  2. static void a( ){System.out.println("A");  }
  3. void b( ){System.out.println("B"); }
  4. }
  5. public class  Inherit extends Base{
  6. static void a( ){System.out.println("C");  }
  7. void b( ){System.out.println("D"); }
  8. public static void main(String args[]){
  9. Base b=new Base();
  10. Base  c=new Inherit();
  11. b.a();
  12. b.b();
  13. c.a();
  14. c.b();
  15. }
  16. }

以上输出的结果是:A

B

A

D

非静态方法 按重写规则调用相应的类实现方法,而静态方法只与类相关。

时间: 2024-10-13 07:16:24

java静态方法的重写,为什么不能?的相关文章

Java 静态方法不能重写

强调 静态方法是属于类的,只存在一份,会被该类的所有对象共享 静态方法可以被子类继承,但是不可以被子类重写 class door{ } class wood_Door extends door{ } class math{ static public door getMes() { return new door(); } } public class HelloWorld extends math { public static wood_Door getMes() { return new

内部类访问外部类的变量必须是final吗,java静态方法中不能引用非静态变量,静态方法中不能创建内部类的实例

内部类访问外部类的变量必须是final吗? 如下:class A{int i = 3;public void shout(){ class B{public void shout1(){System.out.println(i);} }B b=new B();b.shout1();} public static void main(String [] args){A a=new A();a.shout();} }可正常输出3,证明可以访问类的变量i,但改为下面的方式:class A{public

java静态方法(变量)、非静态方法(变量)区别

java静态方法.静态变量在调用时生成唯一标识,即在内存中给定一个静态位子,这样在调用时可以直接找到,而且会节省内存.但如果声明的静态方法.静态变量过多,会占用过多内存,有可能导致内存溢出. 非静态方法.非静态变量有gc管理,每new一个对象时,在堆上分配一块内存,不用时由gc回收. 即,静态方法.静态变量预先分配,非静态方法.非静态变量动态分配. 所有的class.static变量位于方法区,方法区既可以在堆上,又可以在栈上.

静态方法不能重写

1.静态方法是使用公共内存空间的,就是说所有对象都可以直接引用,不需要创建对象再使用该方法. class Cat{ protected static String color ="random"; public void showCatColor(){ System.out.println("Cat : "+color); } public static void staticShowColor(){ System.out.println("Cat sta

Java之方法重写、方法重载、多态

Java之方法重写.方法重载.多态博客分类: java语言Java重写重载多态 一.方法重写(Override) 子类可以重写父类的方法. 方法的返回值类型.参数类型.参数个数都不能改变,只能重写方法体. 方法的重写规则 参数列表必须完全与被重写方法的相同: 返回类型必须完全与被重写方法的返回类型相同: 访问权限不能比父类中被重写的方法的访问权限更低. 例如:如果父类的一个方法被声明为public,那么在子类中重写该方法就不能声明为protected. 解释:用于多态(父类引用子类对象). 声明

java 静态方法和单例模式的区别

1.首先明白内存问题 Java内存分为两部分:堆内存.栈内存 无论是静态方法还是非静态方法,在内存中都只有一份:非静态方法在调用时会默认使用this传入当前对象: 2.静态方法不可以重写 静态方法是在 3.使用上 静态方法不需要new实例就可以调用:非静态方法必须new实例才可以调用: 4.加载时机的问题 静态方法是在类加载的时候就加载到内存中:

java中的重写总结

这个理解了就挺容易的~~ 我就直接贴个程序啦 ,程序里有说明!! 父类: 1 package ParentAndSon; 2 3 public class Parent extends Object {//4:以final修饰的类不能别继承,3:Object是所有类的直接父类或间接父类 4 5 String sex="女"; 6 String name; 7 8 9 public Parent() { 10 11 } 12 13 public Parent(String sex, St

java中的重写和重载

重写 在java中有很多的继承,继承下来的有变量.方法.在有一些子类要实现的方法中,方法名.传的参数.返回值跟父类中的方法一样,但具体实现又跟父类的不一样,这时候我们就需要重写父类的方法,就比如我们有一个类叫做Animals,Animals类中有一个叫做Call,然后我们继承Animals又生成了Cat类和Dog类,Cat和Dog也分别有自己特别的叫声,程序如下: 1 class Animals { 2 public void call() { 3 System.out.println("啊啊啊

Java 继承与重写、重载

1.类的继承 1)继承 父类:所有子类所共有的属性和行为 子类:子类所特有的属性和行为 通过extends关键字来实现类的继承 子类(Sub class)可以继承父类(Super class)的成员变量及成员方法,同时也可以定义自己的成员变量和成员方法 Java语言不支持多重继承,一个类只能继承一个父类(单一继承),但一个父类可以有多个子类 继承具有传递性,子类的子类可以继承父类的父类的成员变量及成员方法 2)继承中构造方法(super关键字) Java规定:构造子类之前必须先构造父类 子类的构