JAVA多态特性的实验

1.对象的数据成员没有多态特性

以下实验证明了数据成员不存在多态的特性。
如果是Base指针,就指向Base的数据成员;
如果是Derived的指针,就指向Derived的数据成员。
class Base {
    protected int i = 47;
}

class Derived extends Base {
    protected int i = 27;
}

public class Test {
    public static void main(String[] args) {
        Base b = new Derived();
        System.out.println(b.i);

        Derived d = new Derived();
        System.out.println(d.i);
        
        //运行结果:
        //47
        //27
    }
}
下面的例子也说明了同样的问题

class Base {
    int i = 47;

    int f() {
        return i;
    }

}

class Derived extends Base {
    int i = 27;

    int g() {
        return i;
    }
}

public class Test {
    public static void main(String[] args) {
        Derived d = new Derived();
        System.out.println(d.f());
        System.out.println(d.g());
        //运行结果:
        //47
        //27
    }
}
2.只有成员函数存在多态特性

class Base {
    int i = 47;

    int f() {
        return g();
    }

    int g() {
        return i;
    }

}

class Derived extends Base {
    int i = 27;

    int g() {
        return i;
    }
}

public class Test {
    public static void main(String[] args) {
        Derived d = new Derived();
        System.out.println(d.f());             //运行结果:27
    }
}
对象d调用f方法,多态特性导致f调用子类的g方法,而不是父类的g方法,故返回27。

3.private final方法会影响多态
    Java的多态特性依赖于晚绑定(动态、运行时绑定)
    并且Java中所有的绑定都是晚绑定
    除了final方法和private方法(private是final的一种)
    这两种方法采用早绑定,即编译期就确定了运行的方法。

class Base {
    int i = 47;

    int f() {
        return g();
    }

    private int g() {
        return i;
    }

}

class Derived extends Base {
    int i = 27;

    int g() {
        return i;
    }
}

public class Test {
    public static void main(String[] args) {
        Derived d = new Derived();
        System.out.println(d.f());
        //运行结果:47
    }
}
    因为f函数调用的g函数是私有的,java采用早绑定,所以没有多态特性,直接绑定在了Base的g函数上。



来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29254281/viewspace-1063748/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/29254281/viewspace-1063748/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值