《java百战1573答案2》由会员分享,可在线阅读,更多相关《java百战1573答案2(19页珍藏版)》请在金锄头文库上搜索。
1、二、重写规则在重写方法时,需要遵循以下的规则:(一) 父类方法的参数列表必须完全与被子类重写的方法的参数列表相同,否则不能称其为重写而是重载。.(二) 父类的返回类型必须与被子类重写的方法返回类型相同,否则不能称其为重写而是重载。.(三) Java中规定,被子类重写的方法不能拥有比父类方法更加严格的访问权限。访问权限大小关系为:编写过Java程序的人就知道,父类中的方法并不是在任何情况下都可以重写的,当父类中方法的访问权限修饰符为private时,该方法只能被自己的类访问,不能被外部的类访问,在子类是不能被重写的。如果定义父类的方法为public,在子类定义为private,程序运行时就会报错
2、。例如:class Personpublic void print()(/public访问权限System.out.println( 父类Person的print方法! );Class Stedent extends Personprivate void print()(/重写方法降低了访问权限,错误System.out.println( 子类Student的print方法! );(四) 由于父类的访问权限修饰符的限制一定要大于被子类重写方法的访问权限修饰符,而private权限最小。所以如果某一个方法在父类中的访问权限是private,那么就不能在子类中对其进行重写。如果重新定义,也只是定义
3、了一个新的方法,不会达到重写的效果。(五) 在继承过程中如果父类当中的方法抛出异常,那么在子类中重写父类的该方法时,也要抛出异常,而且抛出的异常不能多于父类中抛出的异常(可以等于父类中抛出的异常)。换句话说,重写方法一定不能抛出新的检查异常,或者比被重写方法声明更加宽泛的检查型异常。例如,父类的一个方法申明了一个检查异常IOException,在重写这个方法时就不能抛出Exception,只能抛出IOException的子类异常,可以抛出非检查异常。同样的道理,如果子类中创建了一个成员变量,而该变量和父类中的一个变量名称相同,称作变量重写或属性覆盖。但是此概念一般很少有人去研究它,因为意义不大
4、。三、方法重载(Overloading)(一) 如何定义重载。方法的重写和重载只有一个字不同,很多初学者认为这两者十分相似,其实不然。方法重载是让类以统一的方式处理不同类型数据的一种手段。调用方法时通过传递给它们的不同个数和类型的参数来决定具体使用哪个方法,这就是多态性。所谓方法重载是指在一个类中,多个方法的方法名相同,但是参数列表不同。参数列表不同指的是参数个数、参数类型或者参数的顺序不同。方法的重载在实际应用中也会经常用到。不仅是一般的方法,构造方法也可以重载。下面通过一个实例来分析。重载的定义和使用方法。Class Person String name;int age;void prin
5、t()System.out.println(姓名: +name+年龄: +age);void print(String a,int b)System.out.println(姓名: +a+年龄:+b);void print(String a,int b,intC)System.out.println(姓名:+a+年龄: +b+ID号: +c);void print(String a,int b,doubleC)System.out.println(姓名:+a+年龄: +b+ID号:+c);public class OverLoadExampleOLpublicstaticvoidmain(St
6、ring args)Personpl=newPerson();p1.nanle=李明;p1.age=22;p1.print();p1.print(王小早,19);p1.print(金波,18,100325);p1.print(婉宁,25,110903);在上面的程序中,可以看到Person类中有多个名为 void print的方法,这就是方法的重载。执行程序,运行结果如下:姓名:李明年龄:22姓名:王小早年龄:l9姓名:金波年龄:18ID号:10 00325姓名:婉宁年龄:25ID号:110903在方法重载时,方法之间需要存在一定的联系,因为这样可以提高程序的可读性,一般只重载功能相似的方法重
7、载规则。重载是指我们可以定义一些名称相同的方法,通过定义不同的参数来区分这些方法,然后再调用时,Java虚拟机就会根据不同的参数列表来选择合适的方法执行。也就是说,当一个重载方法被调用时,Java用参数的类型和. (或)个数来决定实际调用的重载方法。因此,每个重载方法的参数的类型或个数必须是不同。虽然每个重载方法可以有不同的返回类型,但返回类型并不足以区分所使用的是哪个方法。当Java调用一个重载方法是,参数与调用参数匹配的方法被执行。在使用重载要注意以下的几点:1.在使用重载时只能通过不同的参数列表,必须具有不同的参数列表。例如,不同的参数类型,不同的参数个数,不同的参数顺序。当然,同一方法
8、内的几个参数类型必须不一样,例如可以是 fun(int,float),但是不能为 fun(int,int)。2.不能通过访问权限、返回类型、抛出的异常进行重载。3.方法的异常类型和数目不会对重载造成影响。.4.可以有不同的返回类型,只要参数列表不同就可以了。5.可以有不同的访问修饰符。6.可以抛出不同的异常。四、方法重写与方法重载的区别通过上面例子的分析,我们可以将方法重写和重载的区别总结成这样一个表格,如下:区别点重载重写(覆写)英文OverloadingOveriding定义方法名称相同,参数的类型或个数不同方法名称、参数类型、返回值类型全部相同对权限没有要求被重写的方法不能拥有更严格的权
9、限范围发生在一个类中发生在继承类中五、结束语在面向对象程序设计的思想中,类的继承和多态性主要就是体现在子类重写父类的方法。而构造方法的重载作为方法重载的一个典型特例,可以通过重载构造方法来表达对象的多种初始化行为。灵活的运用方法重写与方法重载,不仅能减少编码的工作量,也能大大提高程序的可维护性及可扩展性。用好重写和重载可以设计一个结构清晰而简洁的类,可以说重写和重载在编写代码过程中的作用非同一般。94、两同三不同指的是?返回值不同构成重载吗?形参名称不同构成重载吗? 方法名相同,类名相同,参数个数不同,参数顺序不同,参数类型不同,返回值不同,形参名称不同 可以构成重载。70、 递归算法中,递归
10、头和递归体分别指什么?自身调用自身的算法;1. 递归算法的优点是什么?缺点是什么?2. 【上机】使用递归算法完成阶乘算法求解5的阶乘;package equals;public class Num public static int gets(int n) / TODO Auto-generated method stubif (n = 1) return 1;else return n*gets(n-1);public static void main(String args) System.out.println(gets(5) );注意:递归算法一般有个判断条件进行结束递归循环;3. 【
11、上机】根据随机生成的的月份,打出该月份的天数.(不考虑闰年、闰月)package equals;public class Months public static void main(String args) int y = (int) (Math.random()*12)+1; System.out.println(y); int x = 0,31,28,31,30,31,30,31,31,30,31,30,31; System.out.println(xy); 4. 【上机】用while和for循环分别计算100以内奇数和偶数的和,并输出。package equals;public cla
12、ss Sum int n ;/4.【上机】用while和for循环分别计算100以内奇数和偶数的和,并输出。利用递归算法 求解100 以内的偶数 和 与奇数和;public static int gets(int n)if(n =1)return 1;elsereturn n+gets(n-2);public static void main(String args) System.out.println(gets(99);用for循环遍历的方法;package equals;public class Sum1 /4.【上机】用while和for循环分别计算100以内奇数和偶数的和,并输出。p
13、ublic static void main(String args) int sum1=0,sum2=0;/ TODO Auto-generated method stubfor (int i = 0; i = 100; i+) if (i%2 = 0) sum1 += i;else sum2 += i;System.out.println(sum1 + +sum2);5. 【上机】用while和for循环输出1-1000之间能被5整除,且每行输出3个。package equals;public class Sum1 public static void main(String args)
14、int c = 0;for (int j = 1; j 1000;j+ ) while(j%5 = 0 )System.out.print(j+,);j+;c+;if(c = 3)c=0;System.out.println(n);6. 【上机】打印出九九乘法表package equals;public class MengFa public static void main(String args) for (int i = 1; i 10; i+) for (int j = 1; j 10; j+) System.out.print(i+*+j+=+i*j+ );if(i = j)System.out.println();7. 【上