黑马程序员技术交流社区

标题: 重载、重写问题 [打印本页]

作者: 汤芝    时间: 2012-8-20 12:29
标题: 重载、重写问题
重载Overload和重写Override有什么联系和区别呢?
作者: 王海亮    时间: 2012-8-20 12:38
重载overload:
只要是一个类以及其父类里有的两个函数有相同的名字但是不同的参数列表(包括参数类型,参数个数,参数顺序3项中的一项或多项)。重载可以在单个类或者两个具有继承关系的类中出现。是实现类的多态性的一种重要方式。

覆盖override:
覆盖只会在类继承的时候才会出现,覆盖要求两个函数的名字和参数列表都完全一样。

覆盖override的注意事项:
1. 对于父类中的静态函数不可以覆盖。
2. 重写的方法不能降低父类方法的"可见度"。
3. 不能抛出新的异常或者父异常。

如下例:

class A{
   static void m1(){System.out.println("父类A的方法m1");}
   void m2(){}
//   int m2(){}//错误,不能重载m2,参数列表一样
   public void m3(int a){}
}
class B extends A{
//   void m1(){}//不能重写A的m1为非静态方法
   static void m1(){System.out.println("重写(Override)父类A的方法m1");}//重写静态方法
//   private void m3(int a){}//重写错误,不能重写A的m3,因为降低了m3的可见性

   void m2(){}//正确,重写父类A的m2,参数列表和返回值都一样
   public void m3(){}//正确,重载父类A的m3,参数列表不同
   
   void m4(){}
   void m4(int a){}//正确,重载B的m4
   void m5(double b){
        System.out.println("Double Method "+b);
        }
}
作者: 汤芝    时间: 2012-8-20 12:40
问题已解决,谢谢{:soso_e100:}




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2