1. 程式人生 > >大王叫我來巡山!!!!!{多態}

大王叫我來巡山!!!!!{多態}

ica com pro log 技術分享 locks extend fun pla

重載多態, 繼承多態,

重載多態:

如:public void show(int a)

{

out<<a<<endl;

}

public void show(string b)

{

out<<b<<endl;

}

繼承多態,:

class person

{

string name;

public:

virtual void show()=0;

}

class student:public person

{

void show(){out<<"學生:"<<name<<endl;

}

class teacher:public person

{

void show(){out<<"老師:"<<name<<endl;

}

main函數裏:

person per1=new student();

person per2=new teacher();

student.show();

teacher.show();

會顯示不同結果

================================================================================================

1、方法的重載和覆蓋 

  a)、重載

  技術分享View Code
 1 /**  2 *    重載:1參數的類型不同 2參數的個數不同 3 參數的順序不同  3 *                與參數的返回值無關,與作用域無關   4 *                在繼承中,父類方法除私有外,其它滿足重載要求  5   6 */  7   8   9 class OverLoadFather 10 { 11         private int OverLoad(int i){ 12             System.out.println("這是父類的int OverLoad(int i)方法!"); 13             return i; 14         } 15  16         public int OverLoad(double i){ 17             System.out.println("這是父類的int OverLoad(double i)方法!"); 18             return (int)i; 19         } 20  21         int OverLoad(float i){ 22             System.out.println("這是父類的int OverLoad(float i)方法!"); 23             return (int)i; 24         } 25  26         protected int OverLoad(int i,int j){ 27             System.out.println("這是父類的int OverLoad(int i,int j)方法!"); 28             return i + j; 29         } 30 } 31  32 class OverLoadSub extends OverLoadFather 33 { 34     private int OverLoad(int i){ 35         System.out.println("這是子類的int OverLoad(int i)方法!"); 36         return i; 37     } 38  39     /* 40     *    重載與返回值的類型無關 41     public double OverLoad(int i){ 42         System.out.println("這是子類的double OverLoad(int i)方法!"); 43         return i; 44     }*/ 45      46     public int OverLoad(double i){ 47         System.out.println("這是子類的int OverLoad(double i)方法!"); 48         return (int)i; 49     } 50  51     public int OverLoad(float i){ 52         System.out.println("這是子類的int OverLoad(float i)方法!"); 53         return (int)i; 54     } 55      56     public int OverLoad(int i,double j){ 57         System.out.println("這是子類的int OverLoad(int i,double j)方法!"); 58         return i + (int)j; 59     } 60  61     public int OverLoad(double i,int j){ 62         System.out.println("這是子類的int OverLoad(double i,int j)方法!"); 63         return (int)i + j; 64     } 65  66     public int OverLoad(int i,double j,float k){ 67         System.out.println("這是子類的int OverLoad(int i,double j,float)方法!"); 68         return i  + (int)(j + k); 69     } 70  71     public int OverLoad(float i,int j,double k){ 72         System.out.println("這是子類的int OverLoad(float i,int j,double k)方法!"); 73         return (int)i + j +(int) k; 74     } 75 } 76 public class TestOverLoad{ 77     public static void main(String[] args)  78     { 79         OverLoadSub ol =new OverLoadSub(); 80         ol.OverLoad(3); 81         ol.OverLoad(3.0); 82         ol.OverLoad(3,3.0); 83         ol.OverLoad(3.0f,3,3.0); 84         ol.OverLoad(3,3,3.0); 85     } 86 }

  b)、覆蓋

 1 class A{                    // 定義類A  2     public void fun1(){        // 定義fun1()方法  3     }  4     public void fun2(){  5     }  6 }  7 class B extends A{  8     public void fun1(){        // 此方法被子類覆寫了  9     } 10     public void fun3(){ 11     } 12 }; 13 public class Pol{ 14     public static void main(String asrgs[]){ 15         B b = new B() ;        // 實例化子類對象 16         A a = b ;            // 向上轉型關系 17         a.fun1() ;            // 此方法被子類覆寫過 18         a.fun3() ; 19     } 20 }

  2、對象的多態性(向上轉型和向下轉型)

  a)、向上轉型

 1 class A{                    // 定義類A  2     public void fun1(){        // 定義fun1()方法  3     }  4     public void fun2(){  5     }  6 }  7 class B extends A{  8     public void fun1(){        // 此方法被子類覆寫了  9     } 10     public void fun3(){ 11     } 12 }; 13 public class Pol{ 14     public static void main(String asrgs[]){ 15         B b = new B() ;        // 實例化子類對象 16         A a = b ;            // 向上轉型關系 17         a.fun1() ;            // 此方法被子類覆寫過 18         a.fun3() ; 19     } 20 }

 b)、向下轉型

 1 class A{                    // 定義類A  2     public void fun1(){        // 定義fun1()方法  3     }  4     public void fun2(){  5     }  6 }  7 class B extends A{  8     public void fun1(){        // 此方法被子類覆寫了  9     } 10     public void fun3(){ 11     } 12 } 13 public class Pol{ 14     public static void main(String asrgs[]){ 15         A a = new A() ;            // 實例化了一個父類對象 16         B b = (B)a ;        // 發生了向下轉型關系 17         b.fun1() ;

18 b.fun2() ; 19 b.fun3() ; 20 } 21 }

大王叫我來巡山!!!!!{多態}