您的位置:首页 > 编程语言 > Java开发

Java基础简单的动态绑定问题

2016-05-18 21:27 423 查看
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的,不能通过多态调用,即子类不能调用父类的方法;
*
*/
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: