多态:
       下面程序中的BaseClass ploymophicBc = new SubClass();,这个ploymophicBc引用变量的编译时类型是BaseClass 而运行时是SubClass,当运行时调用该引用变量的方法时,其方法行为总是表现出子类方法的行为特征,而不是父类方法的行为特征,这就可能出现:相同类型的变量,调用同一个方法时呈现出多种不同的行为特征,这就是多态。

 

  1. class BaseClass  
  2. {  
  3.     public int book = 6;  
  4.     public void base()  
  5.     {  
  6.         System.out.println("父类的一般方法");  
  7.     }  
  8.     public void test()  
  9.     {  
  10.         System.out.println("父类要被继承的方法");  
  11.     }  
  12. }  
  13. public class SubClass extends BaseClass  
  14. {  
  15.     public String book="haha";  
  16.     public void test()  
  17.     {  
  18.         System.out.println("子类覆盖父类的方法");  
  19.     }  
  20.     public void sub()  
  21.     {  
  22.         System.out.println("子类的特有方法");  
  23.     }  
  24.     public static void main(String[] args)  
  25.     {  
  26.     BaseClass bc = new BaseClass();  
  27.     System.out.println(bc.book);  
  28.     bc.base();  
  29.     bc.test();  
  30.     SubClass sc = new SubClass();  
  31.     System.out.println(sc.book);  
  32.     sc.base();  
  33.     sc.test();  
  34.  
  35.     //**************************************  
  36.     BaseClass ploymophicBc = new SubClass();  
  37.  
  38.     System.out.println(ploymophicBc.book);//6  
  39.  
  40.     ploymophicBc.base();//父类的一般方法  
  41.       
  42.     ploymophicBc.test();//子类覆盖父类的方法  
  43.     //**************************************  
  44.     //因为BaseClass类没有提供sub方法,所以下面代码编译时会出错  
  45.     //ploymophicBc.sub();  
  46.  
  47.     }     

另注:同一方法中不能定义名字相同的变量,类型不同也不行。

            引用变量在编译阶段只能调用编译时类型所具有的方法,但运行时则执行他运行时类型所具有的方法。因此编写java代码时,引用变量只能调用声名该变量时所用类里包含的方法。例如:Object p =  new Person(); 这个变量p只能调用Object类中的方法,而不能调用Person类中的方法。

 

使用引用变量的强制类型转换前,最好先用instanceof运算判断是否可以成功转换,这样更安全(否则产生ClassCastException)

例:

if(objPri instanceof String)

{

       String str = (String)objPri;

}

instanceof 运算符的前一个操作数通常是一个引用类型变量,后一个数通常是一个类(也可以是接口),他用于判断的对象是否是后面的类,或者其子类、实现类的实例。

注:

     instanceof操作符前面的操作数的编译时类型要么与后面的类相同,要么与后面的类具有父子继承关系,否则编译错误。