大王叫我來巡山!!!!!{多態}
阿新 • • 發佈:2017-05-19
ica com pro log 技術分享 locks extend fun pla
View Code
重載多態, 繼承多態,
重載多態:
如: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)、重載
![技術分享](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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 }
大王叫我來巡山!!!!!{多態}