原文地址:http://blog.youkuaiyun.com/lubiaopan/article/details/4804139
静态方法大家应该都比较熟悉,在这里主要谈一下静态方法在继承时的一些注意事项。
1、父类方法如果是静态方法,子类不能覆盖为非静态方法;
2、父类方法如果是非静态方法,子类不能覆盖为静态方法;
3、父类静态方法可以被覆盖,允许在子类中定义同名的静态方法,但是没有多态。
下面对第3条特性进行一下代码演示:
class Demo{
public static void display(){
System.out.println("hello");
}
}
class DemoTest extends Demo{
public static void display(){
System.out.println("nihao");
}
}
public class TestStaticExtend{
public static void main(String args[]){
Demo d=new Demo();
d.display();
d=new DemoTest();//注意观察这条语句的输出,是输出hello还是nihao
d.display();
}
}
析:运行该程序你会发现输出的是两个hello,这就是上面所说的“没有多态”,当你将红色的static去掉之后再运行会发现输出的是hello和nihao,此时恢复了多态。
原文地址:http://www.iteye.com/problems/70535
static方法可以被继承,如父类定义一个方法,子类的实例也可以调用该方法
但是,需要注意的是,静态方法不能被重写,静态方法没有多态的概念,如果子类定义了跟父类一样签名的静态方法,那么只是对父类方法的隐藏
(应该说静态方法也是能被“重写”的,但是没有多态,因为子类是能继承父类的静态方法的,但经过子类“重写”后,就“看不到”继承过来的父类静态方法了,故是对父类方法的一种隐藏)
- class Parent {
- public static void say() {
- System.out.println("hello");
- }
- }
- class Son extends Parent {
- }
- public class Test {
- public static void main(String[] args) {
- Son.say();
- }
- }
如上代码,表名子类继承了父类
-------------------------
- class Parent {
- public static void say() {
- System.out.println("parent");
- }
- }
- class Son extends Parent {
- public static void say() {
- System.out.println("son");
- }
- }
- public class Test {
- public static void main(String[] args) {
- Parent p = new Son();
- p.say();
- }
- }
如上代码,表明static方法不能被重写