黑马程序员技术交流社区

标题: 小弟总结了一篇对重载和重写的理解(技术分求助攻!!..... [打印本页]

作者: CanABirdFly?    时间: 2014-7-10 14:39
标题: 小弟总结了一篇对重载和重写的理解(技术分求助攻!!.....
overriding VS overload
首先:overriding是子类继承父类的问题,是子类的函数对父类的函数的重新定义,
即父类有个方法 void speak.(){}方法
如果子类也有 void speak (){}方法则,最终运行的是子类的函数。
要注意的是:
   1、重写方法的参数列表必须完全与被重写的方法的相同,否则不能称其为重写而是重载.
   2、重写方法的访问修饰符一定要大于被重写方法的访问修饰符(public>protected>default>private)。
   3、重写的方法的返回值必须和被重写的方法的返回值一致;
   4、重写的方法所抛出的异常必须和被重写方法的所抛出的异常一致,或者是其子类;
   5、被重写的方法不能为private,否则在其子类中只是新定义了一个方法,并没有对其进行重写。
   6、静态方法不能被重写为非静态的方法(会编译出错)。
   7、如需父类中原有的方法,可使用super关键字,该关键字引用了当前类的父类。
  (父类: void speak.(){int num=1} 子类:void speak.(){int num=2}子类:this.num 父类:super.num)

overload
        1、在使用重载时只能通过相同的方法名、不同的参数形式实现。不同的参数类型可以是不同的参数类型,
           不同的参数个数,不同的参数顺序(参数类型必须不一样);
          2、不能通过访问权限、返回类型、抛出的异常进行重载;
           3、方法的异常类型和数目不会对重载造成影响;
例如:
        class test1
{
        private byte b;
        test1()
        {
        b=1;
        b = b += 1;
        System.out.println("C.b="+b);
        }
        test1(byte b)
        {
        this.b = b;
             ++b;
        System.out.println("D.b="+b);
        }
}
class Number1
{
        public static void main(String[] args)
        {       
                byte b = 1;
               
                test1 c = new test1();
               
                test1 d = new test1(b);
               
        }
}



作者: CanABirdFly?    时间: 2014-7-10 14:44
:)要沉吗???
作者: CanABirdFly?    时间: 2014-7-10 17:25
0.0.没有帮助吗?
作者: mytongyong    时间: 2014-7-10 17:38
本来就是不相干的两个概念,总结一下也挺好啦:D




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