继承与多态中的那些事

在定义:

            A a=new B();

            a.XX(); 

方法覆盖后,编译时看数据类型,运行是看实际的对象类型(new操作符后面跟的构造方法是那个类的),new谁就调用谁的方法。

在调用属性时:

    System.out.println(a.i);

一个对象只有一种形式,但是一个变量却又多种不同形式。

           a是一个A的类型,所以他只能访问到A里面定义的属性。所以编译时看数据类型。

所以只有强制类型转换:

            A a=new B();

            B b=(B)a;

            b.i;//这样就可以访问B里面的属性了

 

class A {

    int i=10;

    public void XX(){

            System.out.println("111");

}  

}

class B extends A{

    int i=100;  

    public void XX(){

            System.out.println("222");  

   }

};

class C{}

   public class ExtendsTest {

   public static void main(String[] args){

            A a=new B();

            a.XX();  

            System.out.println(a.i);

   }

}

输出:222

         10

posted on 2013-09-18 17:51  知识海洋  阅读(163)  评论(0)    收藏  举报