首页 > 代码库 > 大王叫我来巡山!!!!!{多态}

大王叫我来巡山!!!!!{多态}

重载多态, 继承多态,

 

重载多态:

如: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 }

大王叫我来巡山!!!!!{多态}