资源描述
实验2 面向对象编程(Part one)
实验目的
掌握Java程序面向对象编程的基本架构,会运用面向对象的思想编写Java程序。
注:要求使用在命令行完成。
实验题1 阅读如下程序,完成思考题。
class CCircle
{ double pi;
double radius;
double getRadius()
{ return radius;
}
void setCircle(double r, double p)
{ pi=p;
radius=r;
}
}
public class Ex2_1
{ public static void main(String args[])
{ CCircle cir1=new CCircle();
cir1.setCircle(2.0,3.1416);
System.out.println("radius="+cir1.getRadius()); }
}
[基本要求] 运行程序并观察运行结果。
[思考问题] 试述程序中主要语句的作用。
实验题2 设计一个用来描述汽车的类Car,使用类的非静态成员变量来表示汽车的车主姓名name、当前的速率speed:
1. 创建构造函数为三个成员变量赋初值。
2. 使用类的非静态成员方法来表示改车主姓名changeName操作, 并通过该方法显示修改后的车主名称。
3. 使用类的非静态成员方法来表示改变汽车的速率changSpeed操作,并通过该方法显示修改后的车速。
4. 使用类的非静态成员方法来表示停车stop操作,并通过该方法显示停车后的车速。
5. 创建一个Car类的对象,初始状态时,车主名称是自己的名字,speed=0。
6. 分别调用这三个方法,更改车名为朋友的名字,车速为20,停车车速为0,并且得到如下的结果:
实验题3 定义一个类MyProgram,包含两个属性:一个是private的整型属性data、一个是private的String类型的属性str,封装这两个属性的四个方法setData()和getData()、setStr( )和getStr();将这两个属性转变为字符串的方法是toStr()。编写程序,使用MyProgram类,实现数据的访问和修改,并调用toStr()方法显示该类的属性。
[基本要求] 编写完整程序。
[思考问题] 试述程序中各个方法的作用。
实验题4定义一个类实现银行帐户的概念,包括的变量有"帐号"和"存款余额",包括的方法有"存款"、"取款"、"查询余额"和”显示帐号”。定义主类,创建帐户类的对象,并完成相应操作。
提示:关键代码如下:
public int getleftmoney(){
return leftmoney;
}
public void savemoney(double money){
leftmoney+=money;
}
public void getmoney(double money){
if(money<=leftmoney)
leftmoney-=money;
else
System.out.println("只能取:"+leftmoney);
}
…
bankaccount ba=new bankaccount(888123,1000);
ba.savemoney(21000);
System.out.println("存入21000元后余额为:"+ba.getleftmoney());
ba.getmoney(11500);
System.out.println("11500元后余额为:"+ba.getleftmoney());
实验题5 完成课本4.13(102页)jar文件的生成并产生Use类的运行结果。
实验题6 对象的组合。现有一个Rectangle类,请设计一个柱形类cuboid。
1. 此类具有两个成员变量,(1)Rectangle类型的成员变量rect(长方体以长方形做底)和(2)height(柱形的高)。
2. 此类应具有构造方法。
3. (1)此类应具有求面积的方法getVolme()。
(2)此类应具有设置和获得底的长度和宽度的方法:getBottomWidth(),
setBottomWidth(),
getBottomLength(),
setBottomLength()。
Rectangle的代码如下:
public class Rectangle {
double width,length;
public void setWidth(double w) {
if(w > 0)
this.width=w;
}
public double getWidth(){
return width;
}
public void setLength (double h) {
if(length > 0)
this.length =h;
}
public double getLength () {
return length;
}
}
实验题5 有图形类的父类Shape,参照圆Circle类补充完整正方性Square和三角形Triangle类,并分析运行结果。
class Shape {
void draw() {}
void erase() {}
}
class Circle extends Shape {
void draw() { System.out.println("Circle.draw()");}
void erase() { System.out.println("Circle.erase()");}
}
class Square extends Shape {
void draw() { }
void erase() { }
}
class Triangle extends Shape {
void draw() { }
void erase() { }
}
public class Shapes {
public static Shape randShape() {
switch((int)(Math.random() * 3)) {
default: // To quiet the compiler
case 0: return new Circle();
case 1: return new Square();
case 2: return new Triangle();
}
}
public static void main(String[] args) {
Shape[] s = new Shape[3]; // Fill up the array with shapes:
for(int i = 0; i <s.length; i++)
s[i] = randShape(); // Make polymorphic method calls:
for(int i = 0; i <s.length; i++)
s[i].draw();
}
}
实验题6有两个类:MobileManagement和Mobile,分别描述如图所示两部手机名称及价格,类MobileManagement在包cn.edu.nwsuaf.jp.p3中,而Mobile在包cn.edu.nwsuaf.jp.p3.data中。它们代码如下。运行MobileManagement.java,你应该看到如图所示结果。
[基本要求] 在空白处填写相关代码并修改上面程序,使程序能够显示两部手机的价格和数量,运行结果如图所示。
E365, 1780 RMB M330, 1450 RMB
手机及价格图
程序Mobile.java源代码:
public class Mobile {
/** Holds the name of the mobile. */
private String name;
/** Holds the price of the mobile. */
private float price;
/** Creates a new mobile object. */
public Mobile(String name, float price) {
this.name = name;
this.price = price;
}
/** Gets the name of the mobile. */
public String getName() {
return name;
}
/** Gets the price of the mobile. */
Public float getPrice() {
return price;
}
}
程序MobileManagement.java源代码:
import javax.swing.JOptionPane;
public class MobileManagement {
/** Defines the entry point of the application. */
public static void main(String[] args) {
// Creates two mobile phone objects.
Mobile mobile1 = new Mobile("E365", 1780);
Mobile mobile2 = new Mobile("M330", 1450);
// Displays the two mobile phones in a dialog box.
JOptionPane.showMessageDialog(null, "Mobile phones:\n\n"+mobile1.getName()+"\n"+mobile2.getName());
}
}
实验题7有四个类,主类Store在包cn.edu.nwsuaf.jp.p4中,Mobile、Mp3Player、Product在包cn.edu.nwsuaf.jp.p4.data中,Mobile、Mp3Player是Product的子类,Product和Store代码如下:
Store.java源代码:
package cn.edu.nwsuaf.jp.p4;
import java.util.Arrays;
import javax.swing.JOptionPane;
import cn.edu.nwsuaf.jp.p4.data.Mobile;
import cn.edu.nwsuaf.jp.p4.data.Mp3Player;
import cn.edu.nwsuaf.jp.p4.data.Product;
public class Store {
//** Defines the entry point of the application. */
public static void main(String[] args) {
// Creates two mobile phone objects.
Mobile mobile1 = new Mobile("China Mobile", "E365",1780);
Mobile mobile2 = new Mobile("China Mobile", "M330",1450);
Mp3Player player1 = new Mp3Player("Meizo X3", 256, 399);
Mp3Player player2 = new Mp3Player("Meizo E5", 512, 580);
Mp3Player player3 = new Mp3Player("Xlive XM MP3 Play",256, 930);
Product[] products={mobile1,mobile2,player1,player2, player3};
Arrays.sort(products);
String text = "";
for(int index = 0; index <products.length; ++index)
text += products[index].toString()+"\n";
// Displays the two mobile phones in a dialog box.
JOptionPane.showMessageDialog(null,"The products
are:\n\n"+text+"\nThere are "+Product.getCount()
+" products.");
}
}
Product.java源代码:
package cn.edu.nwsuaf.jp.p4.data;
public abstract class Product implements Comparable<Product> {
/** Holds the name of the product. */
protected String name;
/** Holds the price of the product. */
protected float price;
/** Holds the number of products. */
protected static int count;
/** Create a new product object. */
protected Product(String name, float price) {
this.name = name;
this.price = price;
++count;
}
/** Gets the name of the product. */
public String getName() {
return name;
}
/** Gets the price of the product. */
public float getPrice() {
return price;
}
/** Gets the number of products. */
public static int getCount() {
return count;
}
/** Compares this product with the given product. */
public int compareTo(Product product) {
return new Float(product.getPrice()).compareTo(price);
}
}
[基本要求] 设计类Mobile和类MP3Player,使它们和类Product、Store组成一个完整的程序,且运行结果如图所示。
实验题8实现一个名为Person的类和它的子类Employee, Manager是Employee的子类,设计一个接口Add用于涨工资,接口中有一个抽象方法addVage()。普通员工一次能涨10%,经理能涨20%。
具体要求如下:
(1)Person类中的属性有:姓名name(String类型),地址address(String类型)并写出该类的构造方法;
(2)Employee类中的属性有:工号ID(String型),工资wage(double类型),工龄(int型),写出该类的构造方法;
(3)Manager类中的属性有:级别level(String类型),写出该类的构造方法;
编写一个测试类,产生一个员工和一个经理并输出其具有的信息, 之后给这两个人增加工资,然后再次输出信息。
展开阅读全文