【转载】静态(static)方法的继承和重写

原文地址:http://blog.csdn.net/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方法可以被继承,如父类定义一个方法,子类的实例也可以调用该方法 
但是,需要注意的是,静态方法不能被重写,静态方法没有多态的概念,如果子类定义了跟父类一样签名的静态方法,那么只是对父类方法的隐藏

(应该说静态方法也是能被“重写”的,但是没有多态,因为子类是能继承父类的静态方法的,但经过子类“重写”后,就“看不到”继承过来的父类静态方法了,故是对父类方法的一种隐藏

Java代码   收藏代码
  1. class Parent {  
  2.     public static void say() {  
  3.         System.out.println("hello");  
  4.     }  
  5. }  
  6.   
  7. class Son extends Parent {  
  8. }  
  9.   
  10. public class Test {     
  11.     public static void main(String[] args) {    
  12.         Son.say();  
  13.     }    
  14. }  



如上代码,表名子类继承了父类 
------------------------- 

Java代码   收藏代码
  1. class Parent {  
  2.     public static void say() {  
  3.         System.out.println("parent");  
  4.     }  
  5. }  
  6.   
  7. class Son extends Parent {  
  8.     public static void say() {  
  9.         System.out.println("son");  
  10.     }  
  11. }  
  12.   
  13. public class Test {     
  14.     public static void main(String[] args) {    
  15.         Parent p = new Son();  
  16.         p.say();  
  17.     }    
  18. }  


如上代码,表明static方法不能被重写
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值