静态方法能不能被覆盖呢?

静态方法能不能被覆盖呢?先看一个例子:

public class Base{  //父类

public static int a=10;

public static void staticMethod(){

System.out.println("StaticMethod of Base");

}

public void method(){

System.out.println("Method of Base");

}

}

//Sub是继承Base的子类

public class Sub extends Base{

public static int a=30;

public static void staticMethod(){//与Base类的静态方法相同

System.out.println("StaticMethod of Sub");

}

public void method(){//覆盖父类实例方法method()

System.out.println("Method of Sub");

}

}

//Test对上述两个类进行测试

public class Test{

public static void main(String[] args){

Base sub1=new Sub();  //创建Sub类实例并赋给Base类的引用变量

Sub  sub2=new Sub();

sub1.staticMethod();

sub1.method();

System.out.println(sub1.a);

sub2.staticMethod();

sub2.method();

System.out.println(sub2.a);

}

}

//执行结果如下:

StaticMethod of Base

Method of Sub

10

StaticMethod of Sub

Method of Sub

30

从上面的执行结果可以看出Base类的静态方法并没有被子类Sub的静态方法覆盖,只是对其进行了隐藏。另外也可以看出静态成员只与类有关!

时间: 2024-08-01 18:38:25

静态方法能不能被覆盖呢?的相关文章

Java 方法重载,方法重写(覆盖),继承等细节注意

1.方法重载(method overload)的具体规范 如果有两个方法的方法名相同,但参数不一致,那么可以说一个方法是另一个方法的重载. 一.方法名一定要相同. 二.方法的参数表必须不同,包括参数的类型或个数,以此区分不同的方法体. 1.如果参数个数不同,就不管它的参数类型了! 2.如果参数个数相同,那么参数的类型或者参数的顺序必须不同. 三.方法的返回类型.修饰符可以相同,也可不同. 四.main方法也可以被重载 方法重载的作用:可以一个相同的方法传入不同的参数以达到想要的结果 2.方法继承

Java:类与继承(隐藏和覆盖的问题)

盒子先生金金 Java:类与继承(隐藏和覆盖的问题) Java:类与继承 Java:类与继承 对于面向对象的程序设计语言来说,类毫无疑问是其最重要的基础.抽象.封装.继承.多态这四大特性都离不开类,只有存在类,才能体现面向对象编程的特点,今天我们就来了解一些类与继承的相关知识.首先,我们讲述一下与类的初始化相关的东西,然后再从几个方面阐述继承这一大特性.以下是本文的目录大纲: 一.你了解类吗? 二.你了解继承吗? 三.常见的面试笔试题 若有不正之处,请多多谅解并欢迎批评指正. 请尊重作者劳动成果

第十二节(方法的覆盖)

方法的覆盖(Override)的条件: ? 必须要有继承关系 ? 覆盖只能出现在子类中,如果没有继承关系,不存在覆盖,只存在重载 ? 在子类中被覆盖的方法, 必须和父类中的方法完全一样, 也就是方法名, 返回类型.参数列表,完全一样 ? 子类方法的访问权限不能小于父类方法的访问权限 ? 子类方法不能抛出比父类方法更多的异常,但可以抛出父类方法异常的子异常 ? 父类的静态方法不能被子类覆盖 ? 父类的私有方法不能覆盖 ? 覆盖是针对成员方法,而非属性 为什么需要覆盖? 就是要改变父类的行为 方法覆

黑马程序员关于静态方法的使用

静态方法是java中很重要的一个方法,它有如下好处: ① 静态方法可以直接通过 类名.方法名 来调用,而实例方法则需要事先实例化对象,然后才能调用. ② 节约内存,一个方法声明了static 之后,无论多少个方法调用它,它在只占用了一个内存:如果没有声明static,一个方法被调用一次,它就占用一次内存.③ 访问速度较快,因为静态不需要实例化就能使用 ④ 静态方法生命周期很长,所以不担心过期问题 静态方法既然有那么多好处,呢什么时候定义静态呢? 其中给出的一个答案是:当功能内部没有使用到非静态数

Java方法继承、方法重载、方法覆盖小总结

转自:http://blog.csdn.net/cdsnmdl/article/details/3968688 ———————————————————————————————————— 1.方法继承:利用extends关键字一个方法继承另一个方法,而且只能直接继承一个类. 当Sub类和Base类在同一个包时Sub类继承Base类中的public/protected/默认级别的变量个方法 在不同包时继承public/protected级别的变量和方法. 2.方法重载:如果有两个方法的方法名相同,但

方法覆盖

1.子类方法的名称.参数签名和返回类型必须与父类方法的名称.参数签名和返回类型一致 2.子类方法不能缩小父类方法的访问权限 3.子类方法不能抛出比父类方法更多的异常 4.方法覆盖只存在于子类和父类之间.在同一个类中方法只能被重载,不能被覆盖 5.父类的静态方法不能被子类覆盖为非静态方法 6.子类可以定义与父类的静态方法同名的静态方法,以便在子类中隐藏父类的静态方法 子类隐藏父类的静态方法和子类覆盖父类的实例方法的区别:静态方法与所属的类绑定,而实例方法与所属的         实例绑定 7.父类

Java静态属性、静态方法、非静态属性、非静态方法的继承问题简单了解

package com.book.web.controller; /**  * 父类  * @author liweihan  *  */ public class Parent { public String normalStr = "父类非静态属性"; public static String staticStr = "父类静态属性"; public String changeStr = "父类-变量"; public static Stri

方法覆盖-Override

方法覆盖指的是如果在子类中定义的一个方法,其名称,返回类型及参数签名正好与父类中的某个方法的名称,返回类型及参数签名相匹配,那么就可以说子类的方法覆盖了父类的方法. 方法的覆盖必须满足多种约束,下面将一一进行介绍: (1)子类方法的名称,返回类型及参数签名必须与父类方法的名称,返回类型及参数签名一致. 例:如下代码将会导致编译错误 public class Base {     public void method(){              } } public class Sub ext

java中的方法重载和方法覆盖

方法重载的条件: 1.方法名称相同 2.方法参数类型.个数.顺序至少有一个不同 3.方法的返回类型可以不同,因为方法重载和返回类型没有任何关系 4.方法的修饰符可以不同,因为方法重载和修饰符没有任何关系 5.方法重载只出现在同一个类中 方法的覆盖(Override)的条件: 1.必须要有继承关系 2.覆盖只能出现在子类中,如果没有继承关系,不存在覆盖,只存在重载 3.在子类中被覆盖的方法,必须和父类中的方法完全一样,也就是方法名,返回类型. 参数列表,完全一样 4.子类方法的访问权限不能小于父类