首页 新闻 会员 周边

多态的表现形式

0
[待解决问题]

多态有哪些的表现形式,每个表现形式能不能给举子,谢谢了

TangchaoLizi的主页 TangchaoLizi | 菜鸟二级 | 园豆:219
提问于:2012-03-26 21:31
< >
分享
所有回答(4)
0

重载多态, 继承多态,

 

重载多态:

如: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();

会显示不同结果

韦锦业 | 园豆:157 (初学一级) | 2012-03-26 22:27
0

 C++中,实现多态有以下方法:虚函数,抽象类,重载,覆盖

谦行 | 园豆:473 (菜鸟二级) | 2012-03-27 10:29
0

有两种主要体现:

  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 }



编程小神仙 | 园豆:233 (菜鸟二级) | 2012-03-30 19:22
0

package test;

public interface Animal {  

          // 动物叫      

          public void bark();

  }

package test;

public class cat implements Animal {  

             // 猫叫的方式  

            @Override  

             public void bark() {  

                      System.out.println("喵喵");

              }

}

package test;

public class dog implements Animal  {    

                // 狗叫方式

               @Override  

               public void bark() {  

                System.out.println("旺旺");  

   }

}

如上面:动物是本身虚拟的,他有一种叫的本性;但是不知道动物是怎么叫的。然而猫,狗,去继承了动物类后,

就可以叫出不同的方式;自己感觉就是一种形态用于多种的地方

刘建广 | 园豆:204 (菜鸟二级) | 2012-04-25 14:18
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册