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的,不能通过多态调用,即子类不能调用父类的方法;
*
*/
}
相关文章推荐
- 利用java与链表的实现与应用
- Java文件流 字节流和字符流
- 深入浅出: Java回调机制(异步)
- JAVA获取本机IP地址
- java中重载和重写
- JAVA-007前面所学总结加深
- java工具类-排序介绍
- Java基础 - 1.1-Java 语言特性及其基本语法
- Java集合类的混淆点总结(二)
- LeetCode上与树相关的问题
- java中抽象类和接口的异同点
- Java之InetAddress类
- Eclipse构建Maven项目
- Eclipse构建Maven项目
- 初学JAVA环境变量配置以及编译程序和运行
- 马士兵Java课堂笔记-7-键盘事件测试代码
- 深入java学习之java面向对象程序设计
- Java——CLASSPATH环境变量深度解析
- 集合框架-List与Set
- Java swing 入门