关于"多态"static方法的理解

 要强调的是,多态性只发生于方法,而不发生于域.并且,对于方法,只有那些非static与非final方法才具有多态性.

这里讨论的是static方法不能发生多态.值得注意的是,所谓的static方法不能多态指的是:override的方法本身是不是static的,而不是指调用override方法的方法是不是static的!
比如以下程序:

 

class  Father 
    
public void act() 
        System.out.println(
"Father.act()"); 
    }
 
}
 

class  Son  extends  Father 
    
public void act() 
        System.out.println(
"Son.act()"); 
    }
 
}
 
public   class  Test 
    
public static void test(Father i) 
        i.act(); 
    }
 
    
public static void main(String[] a)
        Son son 
= new Son(); 
        test(son); 
    }
 
}
 

输出结果为:Son.act(),如果static不能多态,那结果不就应该是Father.act()吗?

其实,就象上面说的.我们要考虑的是的act()方法是不是static,有没有多态,而不是调用的方法test()是不是static的.
这跟test方法是否static无关,若把两个act方法都修改成static,则输出结果就是Father.act(),因为static方法不能多态.

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值