关于C++ , java继承重载

2 篇文章 0 订阅
C++ 重载只能是同一个类中,
子类重载的话,父类里面的同名方法就被隐藏掉了,即使参数不同
用限定符 :: 可以找到~

#include < iostream >
using   namespace  std;

class  Base  {
public:
    
void foo (int i) {
        cout
<<"Base foo int "<<i<<endl;;
    }

    
void foo () {
        cout
<<"Base foo none "<<endl;
    }

}
;

class  Drived:  public  Base  {
public:
    
void foo (float f) {
        cout
<<"Drived foo float "<<f<<endl;
    }

}
;

int  main()
{
    Drived  derive;     
    derive.foo(
6.9f);  // Output: Drived foo float 6.9
    
//!  obj.foo();       Error
    
//!  derive.foo(2);   Error
    derive.Base::foo();  // OK, Output: Base foo none
    derive.Base::foo(2); //             Base foo int 2
    return 0;
}

而Java允许导出类重新定义父类方法而不会屏蔽其在基类的任何版本
// : reusing/Hide.java
//  Overloading a base-class method name in a derived
//  class does not hide the base-class versions.

class  Homer  {
  
char doh(char c) {
    System.out.println(
"doh(char)");
    
return 'd';
  }

  
float doh(float f) {
    System.out.println(
"doh(float)");
    
return 1.0f;
  }

}


class  Milhouse  {}

class  Bart  extends  Homer  {
  
void doh(Milhouse m) {
    System.out.println(
"doh(Milhouse)");
  }

}


public   class  Hide  {
  
public static void main(String[] args) {
    Bart b 
= new Bart();
    b.doh(
1);
    b.doh(
'x');
    b.doh(
1.0f);
    b.doh(
new Milhouse());
  }

}
  /* Output:
doh(float)
doh(char)
doh(float)
doh(Milhouse)
*/
// :~

width="728" scrolling="no" height="90" frameborder="0" align="middle" src="http://download1.csdn.net/down3/20070601/01184120111.htm" marginheight="0" marginwidth="0">
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值