f2812 绑定java_Java基础简单的动态绑定问题

package game_100;

class A{

int i=1;

int f(){

return i;

}

static char g(){

return 'A';

}

}

class B extends A{

int i=2;

int f(){

return i;

}

static char g(){

return 'B';

}

}

public class Test6_9 {

public static void main(String[] args) {

B b = new B();

System.out.println(b.i);

System.out.println(b.f());

System.out.println(b.g());

System.out.println(B.g());

A a = b;/*这里根本不需要转型,只能说写书的故意玩你们,坑爹啊,哥还查了半天资料,转不转其实一样的效果,不信你们试试!!*/

System.out.println(a.i);

//System.out.println(a.f());

System.out.println(a.g());

System.out.println(A.g());

}

}

这个是带本科大一基础课本上的题目,顺便复习一下记录!

* 现在来详细解释下,前四个输出为 2、2、B、B,这很容易理解,不解释,不懂自己看书!还不懂我们聊聊!嗯哼!

* 着重解释下面四个输出:1、2、A、A;

* 首先明确几个规则:

* A a = new B();其实就是父类引用指向子类对象,就是多态,多态的几个规则记住,(1)当子类中有定义变量与父类相同的时候,不遵循多态原理,

* 也就是a还是调用自己的变量,即父类变量,所以这里第一个输出是1;(2)当子类中的方法名与父类相同的时候,当然要保证父类的方法不是private,如果是私有

* 的就当成不同的方法处理,不是覆盖!现在是public的,则执行重写父类方法,遵循多态原理,动态绑定重写方法,所以a.f()是调用的重写后的子类中的方法,输出

* 为2;(3)静态方法不遵循多态原理,即父类中的static方法不能动态绑定,a直接调用的就是自己的方法,输出为A;不信你们把static去掉,输出就是B

*

* 总结一下:

* 对于 A a = new B();A是父类,B是子类

* 1、父类子类有相同变量,不遵循多态,=号前面是哪个类,就调用哪个类的变量;

* 2、父类子类中有相同的方法,注意不是private或者static的,遵循多态,调用的是子类中的重写方法;

* 3、父类子类中有相同的方法,并且是static的,不遵循多态原理,=号前面是哪个类,就调用哪个类的方法;

* 4、父类中的方法是private的,不能通过多态调用,即子类不能调用父类的方法;

*

*/

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值