如下的程序分析输出结果:- class A {
- void fun1() {
- System.out.println(fun2());
- }
- int fun2() {
- return 123;
- }
- }
- class B extends A {
- int fun2() {
-
- return 456;
- }
-
- public static void main(String argv[]) {
- /*
- * 分析:
- * 1、B 继承了 A,在多态中成员方法是可以继承的,子类可以覆盖父类中的共有方法,
- * 在本例中,子类B继承了父类的fun1(),覆盖了fun2();
- * 2、b.fun1();子类b调用了父类的fun1(),fun1()方法中又调用了fun2(),由于子父类中
- * 都有fun2(),非静态成员方法编译看左边,运行看又边,b.fun1()调用了子类自己的fun2()
- * 输出结果是456。
- * 3、a = b 等效于 A a = new B();多态,父类引用指向子类,
- * a.fun1(),运行时期:看得是所属的类中是否有调用的方法
- * 如果父子类中出现同名方法,会运行子类中方法,因为方法有覆盖特性
- * 输出结果还是456。
- *
- */
- A a;
- B b = new B();
- b.fun1();//456
- a = b; // 等效于 A a = new B();
- a.fun1();//456
- }
- }
复制代码 |
|