类的定义和使用
任务描述
小明家要修一个院子,小明测量了院子的长和宽之后想编写一个程序告诉他院子的周长的面积,请你来帮帮他。
1.相关知识
Java是面向对象的编程语言,所谓面向对象,就是指一个Java程序可以认为是一系列对象的集合,这些对象通过调用彼此的方法来协同工作。
2.Java中的对象
在我们生活的现实世界中,会发现身边有很多对象,车,狗,人等等。所有这些对象都有自己的状态和行为。例如,一条狗是一个对象,它的状态有:名字、品种、颜色,行为有:叫、摇尾巴和跑。
对比现实对象 和 软件对象,它们之间十分相似。软件对象也有状态和行为。软件对象的状态就是属性,行为通过方法体现。在软件开发中,方法操作对象内部状态的改变,对象的相互调用也是通过方法来完成。
3.Java中的类
类是一个模板,它描述一类对象的行为和状态。
通过下面一个简单的类来理解下Java中类的定义:
public class Dog { //类名首字母需大写,这是语法规范
void barking() {
}
void eating() {
}
void sleeping() {
}
String name;
String breed;
int age;
}
在上面这个例子中,name、breed、age是狗的状态,它们通过变量来体现,一个类可以包含以下类型变量:
局部变量:在方法、构造方法或者语句块中定义的变量被称为局部变量。变量声明和初始化都是在方法中,方法结束后,变量就会自动销毁。
成员变量:成员变量是定义在类中,方法体之外的变量。这种变量在创建对象的时候实例化。成员变量可以被类中方法、构造方法和特定类的语句块访问。
类变量:类变量也声明在类中,方法体之外,但必须声明为static类型。
由此可见,上述的name、breed、age属于成员变量。
一个类可以拥有多个方法,在上面的例子中:barking()、eating()和sleeping()都是Dog类的方法。
4.类的访问修饰符
简单介绍一下访问修饰符。
访问修饰符可以用来保护对类、变量、方法和构造方法的访问。Java支持4种不同的访问权限。
(1)默认的,也称为 default,在同一包内可见,不使用任何修饰符。
(2)私有的,以 private 修饰符指定,在同一类内可见。
(3)共有的,以public 修饰符指定,对所有类可见。
(4)受保护的,以 protected 修饰符指定,对同一包内的类和所有子类可见。一般的,我们将类和类的成员方法定义为 public,将类的成员变量定义为private。因为我们不希望用户能直接看到类的成员变量,这部分数据对外界应该是隐藏的;我们希望的是用户通过访问类的成员方法来对类进行操作,类的成员方法就相当于类的对外接口,只有通过这些接口才能访问和使用类。
这就是Java语言特性的封装性,数据被保护在抽象数据类型的内部,尽可能地隐藏内部的细节,只保留一些对外接口使之与外部发生联系。用户无需知道(当然也无从知道)隐藏起来的细节,但可以通过类对外提供的接口,也就是类的成员方法,来与类的成员变量进行交互。
5.类的构造方法
每个类都有构造方法。如果没有显式地为类定义构造方法,Java编译器将会为该类提供一个默认构造方法。
在创建一个对象的时候,至少要调用一个构造方法。构造方法的名称必须与类同名。
一个类可以有多个构造方法,不同的构造方法的参数必须各不相同。这是因为在方法重载中,Java区分不同的方法的依据就是各方法的参数。
下面是一个构造方法示例:
public class Dog {
public Dog() {
}
public Dog(String name) { //该构造方法含有一个String类型参数name,与上面的构造方法参数不同
}
}
6.类的this关键字
类的this关键字用于区分当方法的参数变量与类的成员变量重名的情况,请看示例:
public class Dog {
public Dog(String name) {
this.name = name; //方法的参数变量与类的成员变量都叫name,故使用this关键字加以区分,this.name表示类的成员变量name
}
private String name;
}
- 编程要求
(1)使用构造方法初始化边长。
(2)设计成员方法getPerimeter()和getAcreage(),运算并返回周长和面积。 - 评测说明
平台将自动编译补全后的代码,并生成若干组测试数据,接着根据程序的输出判断程序是否正确。
测试文件YardBuilding.java代码框架如下:
import java.util.Scanner;
public class YardBuilding {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int length = scanner.nextInt();
int width = scanner.nextInt();
Yard yard = new Yard(length, width);
System.out.print(String.valueOf(yard.getPerimeter()) + ' ' + String.valueOf(yard.getAcreage()));
}
}
请注意:Yard.java文件中类的成员方法的名称注意跟测试文件YardBuilding.java中的一致,即getPerimeter和getAcreage。
以下是测试样例:
测试输入:
3 4
预期输出:
14.0 12.0
代码:
package step1;
public class Yard {
double length;
double width;
public Yard(){}
public Yard(double length,double width){
this.length=length;
this.width=width;
}
public double getPerimeter(){
return (length+width)*2;
}
public double getAcreage(){
return length*width;
}
}
续上~小白加油干!虽然小白知道吃多了辣条不好,但是忍不住吃了几包小辣条!٩(๑>◡<๑)۶
小白句子分享:
“你要学会接受别人的离开,他们可能去别的世界升级打怪,他们也有自己的星辰和大海。”–肖骁