第4关:类与对象练习
- 学习内容
- 参考答案
- 记录
任务描述
本关任务:为“无名的粉”写一个类,编写该类的构造方法和成员变量。
相关知识
包的概念
在之前我们定义类和定义方法都是在一个文件中编写的,但是在实际开发过程中我们肯定不能使用一个文件去编写所有的代码。 怎么解决这个问题呢?
Duang,包,登场了,包就像我们
windows系统中的文件夹一样,只不过包是专门存放代码文件的。包的主要作用就是给代码文件分类。
如果一个类被定义在某一个包下那么在定义类的时候需要声明包名,否则程序会报错。
如:
编程要求
我已经帮你创建好了两个文件一个是
WuMingFen.java,另一个是Test.java,你需要切换文件在两个文件中编写代码来完成本关任务。为“无名的粉”写一个类:
class WuMingFen要求:
有三个属性:面码:
String theMa粉的分量(两):int quantity是否带汤:boolean likeSoup;写一个构造方法,以便于简化初始化过程,如:
WuMingFen f1 = new WuMingFen("牛肉",3,true);;重载构造方法,使得初始化过程可以多样化:
WuMingFen f2 = new WuMingFen("牛肉",2);;如何使得下列语句构造出来的粉对象是酸辣面码、2两、带汤的?
WuMingFen f3 = new WuMingFen();;写一个普通方法:
check(),用于查看粉是否符合要求。即:将对象的三个属性打印在控制台上。测试说明
我会对你编写的代码进行测试:
测试输入:
牛肉,3,true预期输出:面码:牛肉,粉的份量:3两,是否带汤:true面码:牛肉,粉的份量:3两,是否带汤:false面码:酸辣,粉的份量:2两,是否带汤:true测试输入:
三鲜,1,true预期输出:面码:三鲜,粉的份量:1两,是否带汤:true面码:三鲜,粉的份量:1两,是否带汤:false面码:酸辣,粉的份量:2两,是否带汤:true鼠标悬停即可切换文件:
开始你的任务吧,祝你成功!
易错点解析:
1、普通方法的调用容易与c语言中函数的用法混淆。比如一开始我写Test,java中check的时候就没有用f1.check();而是习惯性的写成了check(f1);,这样是不行的。
2、this关键字的使用。在WuMingFen.java中需要通过使用this关键字来修改对象的成员变量。如this.theMa访问的是WuMingFen对象自身的theMa,而方法参数中的theMa则表示方法传入的值。
代码参考:
Test.java:
package step4;
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String theMa = sc.next();
int quantity = sc.nextInt();
boolean likeSoup = sc.nextBoolean();
/********** Begin **********/
//使用三个参数的构造方法创建WuMingFen对象 取名 f1
WuMingFen f1=new WuMingFen(theMa,quantity,likeSoup);
//使用两个参数的构造方法创建WuMingFen对象 取名 f2
WuMingFen f2=new WuMingFen(theMa,quantity);
//使用无参构造方法创建WuMingFen对象 取名 f3
WuMingFen f3=new WuMingFen();
//分别调用三个类的 check方法
f1.check();
f2.check();
f3.check();
/********** End **********/
}
}
WuMingFen.java
/********** Begin **********/
//在这里添加包名 step4
package step4;
//创建类 添加属性和方法
class WuMingFen{
String theMa;
int quantity;
boolean likeSoup;
public WuMingFen(String theMa,int quantity,boolean likeSoup){
this.theMa = theMa;
this.quantity = quantity;
this.likeSoup = likeSoup;
}
public WuMingFen(String theMa,int quantity){
this.theMa = theMa;
this.quantity = quantity;
}
public WuMingFen(){
theMa = "酸辣";
quantity = 2;
likeSoup = true;
}
public void check(){
System.out.println("面码:"+this.theMa+",粉的份量:"+this.quantity+"两,是否带汤:"+this.likeSoup);
}
}
/********** End **********/
附带两道老师布置的练习题:
-
1、
下列关于构造方法的说法不正确的是()
A、Java语言规定构造方法名必须与类名相同
B、Java语言规定构造方法没有返回值,且不用void关键字声明
C、构造方法不可以重载
D、构造方法只能用new关键字来创建 -
2、
类Test定义如下:
public class Test{ public float method1(){ System.out.println("方法1"); return 1.5; } }将下列哪些方法插入到
A、第7行是合法的()
B、public float method1(){ System.out.println("方法2"); return 1.1; }
C、public Test1(){ System.out.println("hello"); }public float method1( int a){ System.out.println("方法2"); return a+0.5; }D、
public Test(){ System.out.println("hello"); } -
第2题解析:
-
选项A:与现有
method1方法具有相同的方法名和参数列表,重复方法定义,会导致编译错误。 -
选项B:类名为Test,而构造函数名必须与类名完全一致。这里使用
Test1会被视为一个无效的方法声明,会导致编译错误。 -
选项C:与现有
method1方法同名但不同参,为方法重载。 -
选项D:这是类Test的构造函数定义。即使类中已有默认构造函数,显式定义构造函数是合法的,不会导致冲突。



1万+

被折叠的 条评论
为什么被折叠?



