验证:Java 中 static方法 是 早绑定

关于绑定见 http://blog.csdn.net/nyzhl/archive/2007/05/27/1627601.aspx

我们知道,Java中默认是晚绑定(late binding) ,这个叫法比较混乱,有人叫静态绑定(static binding),还有人叫运行时绑定(runtime binding),他们说的都是一回事。
但凡事都有例外。final关键字声明的就是早绑定。因为final方法不允许重写(override),他想晚绑定也没方法可以晚绑定。
还有一个关键字是private,私有成员,他的子类看不到,当然没法晚绑定了。
另外static方法是不是也是晚绑定呢?严格来说,static方法是属于类的,应该是早绑定。但是它也可以写成对象调用的样子。
如Thread.currenThread();  //获得当前线程
也可以这么写:
Thread t = new Thread();
t.currenThread(); 
这样写严格来讲在逻辑上是错误的。但是Java编译器并不报错,t.currenThread();  相当于Thread.currenThread(); 
那么如果用对象来调用静态方法,会不会晚绑定呢?写个程序试一下就好了

class  A  {
    
static void display() {
        System.out.println(
"Method of Class A !");
    }

}

class  B  extends  A {
    
static void display() {
        System.out.println(
"Method of Class B !");
    }

}

class  C  extends  A  {
    
static void display() {
        System.out.println(
"Method of Class C !");
    }

}

public   class  StaticBinding  {
    
public static void main(String[] args) {
        A b 
= new B();
        A c 
= new C();
        b.display();
        c.display();
    }

}

运行结果:
Method of Class A !
Method of Class A !

由此得到验证,static方法是早绑定。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值