2004年11月23日

1.  当派生类中的方法与基类的方法相同时(指方法名和参数表相同),叫做派生类override基类的方法。


2.  当派生类中的成员变量名与基类的成员变量名同名时,叫做派生类shadow基类的成员。


3.  Overrideshadow在使用派生类的对象的表现是不同的。请看下面的代码:


public class TestInherent {


public static void main(String[] args) {


        derive test = new derive();


 


test.display();  //Display 1


System.out.println(test.i); //Display 1


test.displayStatic(); //Display This is in derive class .


       


((base)test).display(); //Display 1


System.out.println(((base)test).i) //Display 0;


((base)test).displayStatic(); //Display This is in base class.


}


}


 


class base {


int i=0;



void display() {


System.out.println(i);


}



static void displayStatic() {


System.out.println(“This is in base class.”);


}


}


 


class derive extends base {


int i=1;



void display() {


System.out.println(i);


}



static void displayStatic() {


System.out.println(“This is in derive class.”);


}


}


 


以上代码说明方法的override的含义是派生类的对象中不含有基类的被override的方法,所以在派生类外部无法调用到基类的被override的方法。而shadow的含义是派生类的对象也含有基类的被shadow的成员变量,所以在派生类外部可以通过该派生类的对象调用到基类的被shadow的成员变量。


4.  另外,static方法的表现形式与shadow的成员变量相同。当然,推荐的调用static方法的形式是类名.static方法名。

5. 本文所说的能否调用建立在有访问权限的基础上。