java百战1573答案解析.docx
《java百战1573答案解析.docx》由会员分享,可在线阅读,更多相关《java百战1573答案解析.docx(14页珍藏版)》请在冰点文库上搜索。
![java百战1573答案解析.docx](https://file1.bingdoc.com/fileroot1/2023-5/16/7c5f5d30-ae57-4599-8217-fed3f4b9a5ba/7c5f5d30-ae57-4599-8217-fed3f4b9a5ba1.gif)
java百战1573答案解析
二、重写规则
在重写方法时,需要遵循以下的规则:
(一) 父类方法的参数列表必须完全与被子类重写的方法的参数列表相同,否则不能称其为重写而是重载。
..
(二) 父类的返回类型必须与被子类重写的方法返回类型相同,否则不能称其为重写而是重载。
..
(三) Java中规定,被子类重写的方法不能拥有比父类方法更加严格的访问权限。
访问权限大小关系为:
编写过Java程序的人就知道,父类中的方法并不是在任何情况下都可以重写的,当父类中方法的访问权限修饰符为private时,该方法只能被自己的类访问,不能被外部的类访问,在子类是不能被重写的。
如果定义父类的方法为public,在子类定义为private,程序运行时就会报错。
例如:
classPerson
{publicvoidprint()(//public访问权限
System.out.println("父类Person的print方法!
");
}
}
ClassStedentextendsPerson
{privatevoidprint()(//重写方法降低了访问权限,错误
System.out.println("子类Student的print方法!
");
}
}
(四) 由于父类的访问权限修饰符的限制一定要大于被子类重写方法的访问权限修饰符,而private权限最小。
所以如果某一个方法在父类中的访问权限是private,那么就不能在子类中对其进行重写。
如果重新定义,也只是定义了一个新的方法,不会达到重写的效果。
(五) 在继承过程中如果父类当中的方法抛出异常,那么在子类中重写父类的该方法时,也要抛出异常,而且抛出的异常不能多于父类中抛出的异常(可以等于父类中抛出的异常)。
换句话说,重写方法一定不能抛出新的检查异常,或者比被重写方法声明更加宽泛的检查型异常。
例如,父类的一个方法申明了一个检查异常IOException,在重写这个方法时就不能抛出Exception,只能抛出IOException的子类异常,可以抛出非检查异常。
同样的道理,如果子类中创建了一个成员变量,而该变量和
父类中的一个变量名称相同,称作变量重写或属性覆盖。
但是此
概念一般很少有人去研究它,因为意义不大。
三、方法重载(Overloading)
(一) 如何定义重载。
方法的重写和重载只有一个字不同,很多初学者认为这两者十分相似,其实不然。
方法重载是让类以统一的方式处理不同类型数据的一种手段。
调用方法时通过传递给它们的不同个数和类型的参数来决定具体使用哪个方法,这就是多态性。
所谓方法重载是指在一个类中,多个方法的方法名相同,但是参数列表不同。
参数列表不同指的是参数个数、参数类型或者参数的顺序不同。
方法的重载在实际应用中也会经常用到。
不仅是一般的方法,构造方法也可以重载。
下面通过一个实例来分析。
重载的定义和使用方法。
ClassPerson{
{Stringname;
intage;
voidprint(){
System.out.println("姓名:
"+name+"年龄:
"+age);
}
voidprint(Stringa,intb){
System.out.println("姓名:
"+a+"年龄:
"+b);
voidprint(Stringa,intb,intC){
System.out.println("姓名:
"+a+"年龄:
"+b+"ID号:
"+c);
}
voidprint(Stringa,intb,doubleC){
System.out.println("姓名:
"+a+"年龄:
"+b+"ID号:
"+c);
}
}
publicclassOverLoadExampleOL
{publicstaticvoidmain(Stringargs[])
{Personpl=newPerson();
p1.nanle="李明";
p1.age=22;
p1.print();
p1.print("王小早",19);
p1.print("金波",18,100325);
p1.print("婉宁",25,110903);
}
}
在上面的程序中,可以看到Person类中有多个名为voidprint的方法,这就是方法的重载。
执行程序,运行结果如下:
姓名:
李明年龄:
22
姓名:
王小早年龄:
l9
姓名:
金波年龄:
18ID号:
1000325
姓名:
婉宁年龄:
25ID号:
110903
在方法重载时,方法之间需要存在一定的联系,因为这样可以提高程序的可读性,一般只重载功能相似的方法重载规则。
重载是指我们可以定义一些名称相同的方法,通过定义不同的参数来区分这些方法,然后再调用时,Java虚拟机就会根
据不同的参数列表来选择合适的方法执行。
也就是说,当一个重载方法被调用时,Java用参数的类型和..(或)个数来决定实际调用的重载方法。
因此,每个重载方法的参数的类型或个数必须是不同。
虽然每个重载方法可以有不同的返回类型,
但返回类型并不足以区分所使用的是哪个方法。
当Java调用一个重载方法是,参数与调用参数匹配的方法被执行。
在使用重载要注意以下的几点:
1.在使用重载时只能通过不同的参数列表,必须具有不同的参数列表。
例如,不同的参数类型,不同的参数个数,不同的参数顺序。
当然,同一方法内的几个参数类型必须不一样,例如可以是fun(int,float),但是不能为fun(int,int)。
2.不能通过访问权限、返回类型、抛出的异常进行重载。
3.方法的异常类型和数目不会对重载造成影响。
..
4.可以有不同的返回类型,只要参数列表不同就可以了。
5.可以有不同的访问修饰符。
6.可以抛出不同的异常。
四、方法重写与方法重载的区别
通过上面例子的分析,我们可以将方法重写和重载的区别总
结成这样一个表格,如下:
区别点
重载
重写(覆写)
英文
Overloading
Overiding
定义
方法名称相同,参数的类型或个数不同
方法名称、参数类型、返回值类型全部相同
对权限没有要求
被重写的方法不能拥有更严格的权限
范围
发生在一个类中
发生在继承类中
五、结束语
在面向对象程序设计的思想中,类的继承和多态性主要就是体现在子类重写父类的方法。
而构造方法的重载作为方法重载的一个典型特例,可以通过重载构造方法来表达对象的多种初始化行为。
灵活的运用方法重写与方法重载,不仅能减少编码的工作量,也能大大提高程序的可维护性及可扩展性。
用好重写和重载
可以设计一个结构清晰而简洁的类,可以说重写和重载在编写代码过程中的作用非同一般。
94、两同三不同指的是?
返回值不同构成重载吗?
形参名称不同构成重载吗?
方法名相同,类名相同,参数个数不同,参数顺序不同,参数类型不同,返回值不同,形参名称不同可以构成重载。
70、递归算法中,递归头和递归体分别指什么?
自身调用自身的算法;
1.递归算法的优点是什么?
缺点是什么?
2.【上机】使用递归算法完成阶乘算法
求解5的阶乘;
packageequals;
publicclassNum{
publicstaticintgets(intn){
//TODOAuto-generatedmethodstub
if(n==1){
return1;
}else{
returnn*gets(n-1);
}
}
publicstaticvoidmain(String[]args){
System.out.println(gets(5));
}
注意:
递归算法一般有个判断条件进行结束递归循环;
3.【上机】根据随机生成的的月份,打出该月份的天数.(不考虑闰年、闰月)
packageequals;
publicclassMonths{
publicstaticvoidmain(String[]args){
inty=(int)(Math.random()*12)+1;
System.out.println(y);
intx[]={0,31,28,31,30,31,30,31,31,30,31,30,31};
System.out.println(x[y]);
}
}
4.【上机】用while和for循环分别计算100以内奇数和偶数的和,并输出。
packageequals;
publicclassSum{
intn;
//4.【上机】用while和for循环分别计算100以内奇数和偶数的和,并输出。
利用递归算法求解100以内的偶数和与奇数和;
publicstaticintgets(intn){
if(n==1){
return1;
}else{
returnn+gets(n-2);
}
}
publicstaticvoidmain(String[]args){
System.out.println(gets(99));
}
}
用for循环遍历的方法;
packageequals;
publicclassSum1{
//4.【上机】用while和for循环分别计算100以内奇数和偶数的和,并输出。
publicstaticvoidmain(String[]args){
intsum1=0,sum2=0;
//TODOAuto-generatedmethodstub
for(inti=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个。
packageequals;
publicclassSum1{
publicstaticvoidmain(String[]args){
intc=0;
for(intj=1;j<1000;j++){
while(j%5==0){
System.out.print(j+",");
j++;
c++;
if(c==3){
c=0;
System.out.println("\n");
}
}
}
}
}
6.【上机】打印出九九乘法表
packageequals;
publicclassMengFa{
publicstaticvoidmain(String[]args){
for(inti=1;i<10;i++){
for(intj=1;j<10;j++){
System.out.print(i+"*"+j+"="+i*j+"");
if(i==j){
System.out.println();
}
}
}
}
}
7.【上机】编程求:
∑1+∑2+……+∑100
packageequals;
publicclassJieCheng{
publicstaticvoidmain(String[]args){
intn;
intsum=0;
for(intj=1;j<=100;j++){
for(inti=1;i<=j;i++){
sum+=i;
}
}
System.out.println(sum);
}
}
8.【上机】生成0-100随机数,直到生成88为止,停止循环!
9.【上机】把100~150之间不能被3整除的数输出
10.
11.【上机】打印出实心10*10正方形、空心10*10正方形
12.【上机】打印出实习10*10菱形,空心10*10菱形
13.【上机】将如上所有上机相关算法的作业,封装成方法,便于重用。
第四章数组
14.数组的类型可以为任意类型吗?
可以
15.数组中的元素的类型必须是相同的吗?
数组中的元素是有序的吗?
类型必须相同,元素是有顺序的;
16.数组的长度可变不?
数组的长度使用哪个属性?
长度不可以变化,lengthindex
17.数组元素下标(或索引)的范围是?
Index0-length-1
18.数组也是引用类型吗?
数组也是对象,这句话对吗?
数组是引用类型,是对象
19.数组中的元素就像对象中的成员变量一样,初始化方式也一样。
这句话对吗?
对
20.【上机】数组的三种初始化方式是什么?
并测试练习相关代码
int[]Array={1,2,3,4};
int[]a=newint[4];
int[]Array1=newint[4];
21.数组的静态初始化代码,下面代码有没有不合理的地方:
后面逗号多余
22.Dog[]dogs2={
23.newDog("大黄",1),
24.newDog("小强",2),
25.};
26.完成如下代码:
char[]s;
s=newchar[26];
for(inti=0;i<26;i++){
s[i]=(char)(’A’+i);
System.out.println(s[i]);
//System.out.println(“s[”+i+“]=”+s[i]);
}
27.下面的数组定义哪些是正确的?
E
A:
inta[][]=newint[3,3];
B:
inta[3][3]=newint[][];
C:
inta[][]=newint[3][3];
D:
int[]a[]=newint[3][3];
E:
int[][]a=newint[3][3];
28.请在下面语句中找出一个正确的。
A.intarr1[2][3];
B.int[][]a2=newint[2][];
C.int[][]arr2=newint[][4];
D.intarr3[][4]=newint[3][4];
29.【上机】定义一个长度为10的一维字符串数组,在每一个元素存放一个单词;然
后运行时从命令行输入一个单词,程序判断数组是否包含有这个单词,包含这个
单词就打印出“Yes”,不包含就打印出“No”。
importjava.util.Scanner;
publicclassArray{
publicstaticvoidmain(String[]args){
Scannersc=newScanner(System.in);
Strings=sc.next();
String[]array={"lvping","lvgang","wangdi","lili","wangxianchao","dada","guniang","yixin"};
for(inti=0;iif(s.equals(array[i])){
System.out.println("yes");
}
}
}
}
30.冒泡排序的基本思路
冒泡排序思路:
比较相邻的每一对元素的大小,并且将大的放到右边!
最终重复比较相邻的元素,直到没有需要比较的元素!
31.使用冒泡排序完成数组元素的排序
32.可变参数的作用及其用法
可变参数的作用就是在不明显有几个参数的情况下!
!
接收几个参数!
...
33.如何给main方法传递实参
34.【上机】用二重循环求出二维数组b所有元素的和:
packageequals;
//二维数组求和
publicclassSumArray{
publicstaticvoidmain(String[]args){
intsum=0;
int[][]a1={{11},{21,22},{31,32,33}};
for(inti=0;ifor(intj=0;jsum+=a1[i][j];
System.out.println(a1[i]);
}
}
System.out.println(sum);
}
}
Eclipse可以开发Java,可以开发c++吗?
可以的!
35.Eclipse中的debug模式有什么好处?
36.可以查询每一步怎么运行的!
!
37.
38.Eclipse中运行一个Java程序,如何操作?
39.写好一个java程序然后运行即可!
注意先保存后运行。
40.Eclipse需要安装吗?
使用eclispe需要安装JDK吗?
Eclipse当然需要安装,不需要安装jdk。
41.【上机】熟悉Eclipse开发环境,建立一个Java项目,并运行一个类
已经完成。
42.【上机】熟悉Eclipse的调试环境(debug),建立一个Java项目,并使用debug
进行调试,测试程序每步执行情况。
43.双击代码左侧形成断点
44.假如我找不到packageexplore视图了,怎么样才能让他出现?
WindowsshowViewpackageexplore
45.阶段项目课程2
46.【项目】福彩双色球项目
47.练习目标
48.1.掌握数据类型和运算符
49.2.掌握流程控制
50.3.掌握数组
51.4.掌握方法的定义和调用
52.5.提高代码调试能力
53.全部讲解和练习时间控制在4小时以内
54.项目需求
55.双色球投注区分为红色球号码区和蓝色球号码区,
56.红色球号码区由1-33共33个号码组成,蓝色球号码区由1-16共16个号码组成。
57.投注时选择6个红球号码和1个蓝球号码组成一注进行单式投注,每注金额2元。
58.中奖规则同福彩双色球规则;
59.显示中奖结果的同时显示您一共下注人民币?
?
元,累计中奖人民币?
?
元
60.
61.扩展:
62.按照自己的思路和老师的代码模板,设计一个小的作业项目。
63.将上一个作业作业录制成自己的教学视频
请指正!