Java作为一种面向对象语言。支持以下基本概念:
- 多态
- 继承
- 封装
- 抽象
- 类
- 对象
- 实例
- 方法
- 重载
本节我们重点研究对象和类的概念。
- 对象:对象是类的一个实例,有状态和行为。例如,一条狗是一个对象,它的状态有:颜色、名字、品种;行为有:摇尾巴、叫、吃等。
- 类:类是一个模板,它描述一类对象的行为和状态。
下图中男孩(boy)、女孩(girl)为类(class),而具体的每个人为该类的对象(object):
实验目的
(1)掌握Java类的结构、类的定义、方法和属性的定义以及对象的实现;
(2)掌握类及其成员修饰符的使用;掌握构造函数的使用;方法的参数传递和返回值的用法。
实验内容
(1)编写3个基本类: Triangle, Ladder和Circle,分别用来刻画“三角形”、“梯形”和“圆形”类; 1个主类: Compute,负责计算每个形状的面积或周长。
具体要求:
- Triangle 定义3个变量:边长;和1个求周长的方法。
-
public class Triangle { private double a; private double b; private double c; Triangle(double a,double b,double c){ this.a=a; this.b=b; this.c=c; } Triangle(){ } public void setA(double a) { this.a = a; } public void setB(double b) { this.b = b; } public void setC(double c) { this.c = c; } public void getlong(){ System.out.print(a+b+c); } } }
- Ladder 定义3个变量:上底,下底和高;定义1个求面积的方法。
-
public class Ladder { private double up; private double down; private double heigh; Ladder(double up,double down,double heigh){ this.up=up; this.down=down; this.heigh=heigh; } Ladder(){ } public void setUp(double up) { this.up = up; } public void setDown(double down) { this.down = down; } public void setHeigh(double heigh) { this.heigh = heigh; } public void getmeasure(){ System.out.print((up+down)*heigh/2); } }
- Circle 定义1个变量:半径;定义2个方法:求面积、求周长。
-
public class Circle { private double R; Circle(double r){ R=r; } Circle(){ } public void setR(double r) { R = r; } public void getlong(){ System.out.print(2*Math.PI*R); } public void getmeasure(){ System.out.print(Math.PI*R*R); } }
- 3个基本类都要定义相应的构造方法,对变量进行初始化。
-
public class Computer { public static void main(String[] args) { Triangle triangle = new Triangle(10,10,10); Ladder ladder = new Ladder(5,6,7); Circle circle = new Circle(3); System.out.print("\n三角形周长:\n"); triangle.getlong(); System.out.print("\n梯形面积:\n"); ladder.getmeasure(); System.out.print("\n圆形形周长:\n"); circle.getlong(); System.out.print("\n圆形面积:\n"); circle.getmeasure(); } }
(2)编写一个账户类Account,它包括:一个名为id的int型账号码属性,一个名为balance的double型的账号余额属性,定义一个类型为java.util.Date的属性dateCreated,用于记录账号的创建日期。同时,定义无参的构造函数,一个名为withDraw的方法从账号提取特定数目的金额,一个名为deposit的方法向账号存入特定数目的金额。请编写测试程序,测试各个方法。
import java.util.Date;
public class Account {
private int id;
private double balance;
private java.util.Date dateCreated;
Account(int id,double balance){
this.id=id;
this.balance=balance;
this.dateCreated=new Date();
}
public void setId(int id) {
this.id = id;
}
public void setBalance(double balance) {
this.balance = balance;
}
public void setDateCreated(Date dateCreated) {
this.dateCreated = dateCreated;
}
public int getId() {
return id;
}
public double getBalance() {
return balance;
}
public Date getDateCreated() {
return dateCreated;
}
public void withDraw(double sum){
balance-=sum;
}
public void deposit(double sum){
balance+=sum;
}
public static void main(String[] args){
Account me=new Account(123,999);
me.deposit(100);
System.out.print("ID:\n");
System.out.print(me.getId());
System.out.print("\n当前余额为:\n");
System.out.print(me.getBalance());
System.out.print("\n时间:\n");
System.out.print(me.getDateCreated());
System.out.print("\n");
me.withDraw(30);
System.out.print("\n当前余额为:\n");
System.out.print(me.getBalance());
}
}
(3)编写一个封装学生的类Student,能够描述学生的“学号”、“ 姓名”、“性别”、“年龄”、“平均成绩”等基本属性,及获取属性、修改属性的方法和打印学生基本信息的print()方法。要求生成两个学生对象,在构造方法中进行初始化,并打印每个学生的基本信息。
public class Student {
private int ID;
private String name;
private String gender;
private int age;
private double Averagescore;
Student(int ID,String name,String gender,int age,double Averaescore) {
this.ID=ID;
this.name=name;
this.gender=gender;
this.age=age;
this.Averagescore=Averaescore;
}
Student(){
}
public void setAveragescore(double averagescore) {
Averagescore = averagescore;
}
public void setAge(int age) {
this.age = age;
}
public void setGender(String gender) {
this.gender = gender;
}
public void setName(String name) {
this.name = name;
}
public void setID(int ID) {
this.ID = ID;
}
public String getName() {
return name;
}
public int getID() {
return ID;
}
public String getGender() {
return gender;
}
public int getAge() {
return age;
}
public double getAveragescore() {
return Averagescore;
}
public void print(){
System.out.printf("姓名:%s 学号:%d 性别:%s 年龄:%d 平均成绩:%.1f",name,ID,gender,age,Averagescore);
}
public static void main(String[] args) {
Student 张三 = new Student(2203082,"张三","男",20,100);
Student 李四 = new Student(1234567,"李四","男",10,100);
张三.print();
System.out.print("\n");
李四.print();
}
}