实验二 面向对象程序设计
一、实验目的
1.掌握类来封装对象的属性和功能。
2.掌握对象的组合以及参数传递。
3.掌握类变量与实例变量,以及类方法与实例方法的区别。
4.掌握使用package和import语句。
5.掌握下列知识点:
(1)子类的继承性;
(2)子类对象的创建过程;
(3)成员变量的继承与隐藏;
(4)方法的继承与重写。
6.掌握重写的目的以及怎样使用super关键字。
7.掌握上转型对象的使用。
二、实验内容
1.编写一个Java应用程序,该程序有两个类,即Vehicle(用于刻画机动车)和User主类。
2.编写一个Java应用程序,模拟家庭买一台电视,即家庭将电视作为自己的一个成员,通过调用一个方法将某台电视的引用传递给自己的电视成员。
3.编写程序模拟两个村庄共用同一口井水。
4.要求使用package语句将方程的属性封装在一个有包名的类中。
5.编写程序模拟中国人、美国人是人,北京人是中国人。
6.编写程序按年计算利息的一般方法。
7.编写程序计算各自领取薪水的具体方式。
三、实验步骤与实验结果
1.机动车
源代码:
package chapert1;
public class User {
public static void main(String[] args) {
// TODO Auto-generated method stub
Vehicle car1,car2;
car1=new Vehicle();
car2=new Vehicle();
car1.setPower(128);
car2.setPower(76);
System.out.println("car1的功率是:"+car1.getPower());
System.out.println("car2的功率是:"+car2.getPower());
car1.speedUp(80);
car2.speedUp(80);
System.out.println("car1目前的速度:"+car1.getSpeed());
System.out.println("car2目前的速度:"+car2.getSpeed());
car1.speedDown(10);
car2.speedDown(20);
System.out.println("car1目前的速度:"+car1.getSpeed());
System.out.println("car2目前的速度:"+car2.getSpeed());
}
}
package chapert1;
public class Vehicle {
double speed;
int power;
void speedUp(int s) {
speed=speed+s;
}
void speedDown(int d) {
speed=speed-d;
}
void setPower(int p) {
power=p;
}
int getPower() {
return power;
}
double getSpeed() {
return speed;
}
}
2.家中的电视
源代码:
package chapert2;
public class MainClass {
public static void main(String[] args) {
// TODO Auto-generated method stub
TV haierTV = new TV();
haierTV.setChannel(5);
System.out.println("haierTV的频道是"+haierTV.getChannel());
Family zhangSanFamily = new Family();
zhangSanFamily.buyTV(haierTV);
System.out.println("zhangSanFamily开始看电视节目");
zhangSanFamily.seeTV();
int m=2;
System.out.println("hangSanFamily将电视更换到"+m+"频道");
zhangSanFamily.remoteControl(m);
System.out.println("haierTV的频道是"+haierTV.getChannel());
System.out.println("hangSanFamily再看电视节目");
zhangSanFamily.seeTV();
}
}
package chapert2;
public class Family {
TV homeTV;
void buyTV(TV tv) {
homeTV=tv;
}
void remoteControl(int m) {
homeTV.setChannel(m);
}
void seeTV() {
homeTV.showProgram(); //homeTV调用showProgram()方法
}
}
package chapert2;
public class TV {
int channel; //电视频道
void setChannel(int m) {
if(m>=1){
channel=m;
}
}
int getChannel(){
return channel;
}
void showProgram(){
switch(channel) {
case 1 : System.out.println("综合频道");
break;
case 2 : System.out.println("经济频道");
break;
case 3 : System.out.println("文艺频道");
break;
case 4 : System.out.println("国际频道");
break;
case 5 : System.out.println("体育频道");
break;
default : System.out.println("不能收看"+channel+"频道");
}
}
}
3.共饮同井水
源代码:
package chapert3;
public class Land {
public static void main(String[] args) {
// TODO Auto-generated method stub
Village.setWaterAmount(200);
int leftWater =Village.waterAmount;
System.out.println("水井中有 "+leftWater+" 升水");
Village zhaoZhuang,maJiaHeZhi;
zhaoZhuang = new Village("赵庄");
maJiaHeZhi = new Village("马家河子");
zhaoZhuang.setPeopleNumber(80);
maJiaHeZhi.setPeopleNumber(120);
zhaoZhuang.drinkWater(50);
leftWater = maJiaHeZhi.lookWaterAmount();
String name=maJiaHeZhi.name;
System.out.println(name+"发现水井中有 "+leftWater+" 升水");
maJiaHeZhi.drinkWater(100);
leftWater = zhaoZhuang.lookWaterAmount();
name=zhaoZhuang.name;
System.out.println(name+"发现水井中有 "+leftWater+" 升水");
int peopleNumber = zhaoZhuang.getPeopleNumber();
System.out.println("赵庄的人口:"+peopleNumber);
peopleNumber = maJiaHeZhi.getPeopleNumber();
System.out.println("马家河子的人口:"+peopleNumber);
}
}
package chapert3;
public class Village {
static int waterAmount; //模拟水井的水量
int peopleNumber; //村庄的人数
String name; //村庄的名字
Village(String s) {
name = s;
}
static void setWaterAmount(int m) {
if(m>0)
waterAmount = m;
}
void drinkWater(int n){
if( waterAmount-n>=0) {
waterAmount = waterAmount-n;
System.out.println(name+"喝了"+n+"升水");
}
else
waterAmount = 0;
}
static int lookWaterAmount() {
return waterAmount;
}
void setPeopleNumber(int n) {
peopleNumber = n;
}
int getPeopleNumber() {
return peopleNumber;
}
}
4.求方程的根
源代码:
package chapert4;
public class SunRise {
public static void main(String args[]) {
SquareEquation equation=new SquareEquation(4,5,1);
equation.getRoots();
equation.setCoefficient(-3,4,5);
equation.getRoots();
}
}
package chapert4;
public class SquareEquation {
double a,b,c;
double root1,root2;
boolean boo;
public SquareEquation(double a,double b,double c) {
this.a=a;
this.b=b;
this.c=c;
if(a!=0)
boo=true;
else
boo=false;
}
public void getRoots() {
if(boo) {
System.out.println("是一元2次方程");
double disk=b*b-4*a*c;
if(disk>=0) {
root1=(-b+Math.sqrt(disk))/(2*a);
root2=(-b-Math.sqrt(disk))/(2*a);
System.out.printf("方程的根:%f,%f\n",root1,root2);
}
else {
System.out.printf("方程没有实根\n");
}
}
else {
System.out.println("不是一元2次方程");
}
}
public void setCoefficient(double a,double b,double c) {
this.a=a;
this.b=b;
this.c=c;
if(a!=0)
boo=true;
else
boo=false;
}
}
5.中国人、北京人和美国人
源代码:
package chapert1;
public class Example {
public static void main(String args[]) {
Chinese chinaPeople=new Chinese();
American americanPeople=new American();
Beijingman beijingPeople=new Beijingman();
chinaPeople.speakHello();
americanPeople.speakHello();
beijingPeople.speakHello();
chinaPeople.averageHeight();
americanPeople.averageHeight();
beijingPeople.averageHeight();
chinaPeople.averageWeight();
americanPeople.averageWeight();
beijingPeople.averageWeight();
chinaPeople.chinaGongfu();
americanPeople.americanBoxing();
beijingPeople.beijingOpera() ;
beijingPeople.chinaGongfu();
}
}
package chapert1;
public class People {
protected double weight,height;
public void speakHello() {
System.out.println("yayayaya");
}
public void averageHeight() {
height=173;
System.out.println("average height:"+height);
}
public void averageWeight() {
weight=70;
System.out.println("average weight:"+weight);
}
}
package chapert1;
public class Chinese extends People {
public void speakHello() {
System.out.println("您好");
}
public void averageHeight() {
height = 168.78;
System.out.println("中国人的平均身高:"+height+" 厘米");
}
public void averageWeight() {
weight=65;
System.out.println("中国人的平均体重:65公斤");
}
public void chinaGongfu() {
System.out.println("坐如钟,站如松,睡如弓");
}
}
package chapert1;
public class Beijingman extends Chinese {
public void averageHeight() {
height=17.25;
System.out.println("北京人的平均身高: "+height+"厘米");
}
public void averageWeight() {
weight=70;
System.out.println("北京人的平均体重:70公斤");
}
public void beijingOpera() {
System.out.println("花脸、青衣、花旦和老生");
}
}
package chapert1;
public class American extends People {
public void speakHello() {
System.out.println("How do you do");
}
public void averageHeight() {
height=176;
System.out.println("American's average height:"+height+"cm");
}
public void averageWeight() {
weight = 75;
System.out.println("American's average weight:"+weight+" kg");
}
public void americanBoxing() {
System.out.println("直拳、钩拳、组合拳");
}
}
6.银行计算利息
源代码:
package chapert2;
public class SaveMoney {
public static void main(String args[]) {
int amount=8000;
ConstructionBank bank1 = new ConstructionBank();
bank1.savedMoney = amount;
bank1.year = 8.236;
bank1.setInterestRate(0.035);
double interest1 = bank1.computerInterest();
BankOfDalian bank2 = new BankOfDalian();
bank2.savedMoney = amount;
bank2.year = 8.236;
bank2.setInterestRate(0.035);
double interest2=bank2.computerInterest();
System.out.printf("两个银行利息相差%f元\n",interest2-interest1);
}
}
package chapert2;
public class ConstructionBank extends Bank {
double year;
public double computerInterest() {
super.year=(int)year;
double r = year-(int)year;
int day=(int)(r*1000);
double yearInterest = super.computerInterest();
double dayInterest = day*0.0001*savedMoney;
interest= yearInterest+dayInterest;
System.out.printf("%d元存在建设银行%d年零%d天的利息:%f元\n",
savedMoney,super.year,day,interest);
return interest;
}
}
package chapert2;
public class BankOfDalian extends Bank {
double year;
public double computerInterest() {
super.year=(int)year;
double r = year-(int)year;
int day=(int)(r*1000);
double yearInterest = super.computerInterest();
double dayInterest = day*0.00012*savedMoney;
interest= yearInterest+dayInterest;
System.out.printf("%d元存在大连银行%d年零%d天的利息:%f元\n",savedMoney,super.year,day,interest);
return interest;
}
}
package chapert2;
public class Bank {
int savedMoney;
int year;
double interest;
double interestRate = 0.29;
public double computerInterest() {
interest=year*interestRate*savedMoney;
return interest;
}
public void setInterestRate(double rate) {
interestRate = rate;
}
}
7.公司支出的总薪水
源代码:
package chapert3;
import java.util.Iterator;
abstract class Employee {
public abstract double earnings();
}
class YearWorker extends Employee {
public double earnings() {
return 12000;
}
}
class MonthWorker extends Employee {
public double earnings() {
return 12*2300;
}
}
class WeekWorker extends Employee {
public double earnings(){
return 52*780;
}
}
class Company {
Employee[] employee;
double salaries=0;
Company(Employee[] employee) {
this.employee=employee;
}
public double salariesPay() {
salaries=0;
for (int i=0;i<employee.length;i++) {
salaries=salaries+employee[i].earnings();
}
return salaries;
}
}
public class CompanySalary {
public static void main(String args[]) {
Employee [] employee=new Employee[29]; //公司有29名雇员
for(int i=0;i<employee.length;i++) { //雇员简单地分成三类
if(i%3==0)
employee[i]=new WeekWorker();
else if(i%3==1)
employee[i]=new MonthWorker();
else if(i%3==2)
employee[i]=new YearWorker();
}
Company company=new Company(employee);
System.out.println("公司薪水总额:"+company.salariesPay()+"元");
}
}
四、实验总结
通过本次实验掌握了数据类型的转换,多种流程处理的方法。巩固了子类的继承性、成员变量的继承与隐藏、方法的继承与重写,掌握了重写的目的以及怎样使用super关键字。