目录
一、实验目的与任务
二、实验内容、要求及安排方式
1、实验内容与要求:
(1)
(2)
(3)
(4)
2、要求:
3、实验安排方式:
三、实验环境
四、核心代码及运行效果
(1):
(2):
(3):
(4):
五、实验小结
一、实验目的与任务
1、掌握构造方法和成员方法重载的应用;
2、理解类的继承性的作用;
3、领会面向对象编程的多态性;
4、熟练掌握抽象类abstract的概念;
5、熟练掌握接口interface的概念;
6、熟练包package的概念以及编译运行的方法;
7、熟练掌握内部类inner class的概念;
8、理解面向对象的程序设计方法。
二、实验内容、要求及安排方式
1、实验内容与要求:
(1)
定义一个圆类Circle,成员变量:半径 radius;成员方法:构造方法、get和set半径的方法、计算面积和周长的方法。定义圆柱和圆锥类,定义相应的变量成员和成员方法。使用以上类编程,输出圆的面积和圆柱、圆锥的体积。
(2)
声明一个类MyClass,包含一个整型变量data和封装这个变量的两个方法getData()和setData()。声明一个该类的子类SubClass,包含一个整型变量Mydata和封装这个变量的两个方法getMydata()和setMydata(),编写主程序检查SubClass类中的所有变量与方法(包括继承自父类的变量和方法)。
(3)
下面给出一个根据雇员类型利用多态性完成工资单计算的程序。定义一个类Employee作为超类,Employee的子类有Boss(每星期发给他固定工资,而不计工作时间)、PieceWorker(按其生产的产品数发放工资)、HourlyWorker(根据工作时间长短发放工资)。对所有雇员类型都使用earnings()方法完成其工资单的计算,但每个人挣的工资按他所属的雇员类计算,所有雇员类都是从超类Employee派出生的。所以在超类中声明earnings()方法,该方法没有实质性工作,而是在每个子类都提供恰当的earnings()方法的重写。为了计算雇员的工资,程序仅使用雇员对象的一个超类引导并调用earnings()方法。
(4)
编写一个应用程序,实现以下功能:
①声明一个接口(Calculability)
接口中包含一个方法area()。
②声明一个三角形类继承该接口,类名为Triangle
类中包含两个变量、一个带参数的构造方法和一个计算三角形面积的方法:
三角形的底边长w
三角形的高h
构造方法Triangle(double width,double height)。
计算三角形面积的方法area(),该方法覆盖接口(Calculability)的同名方法,计算三角形的面积(w*h/2)。
③声明一个锥体类(Taper)
包含一个接口对象bottom(锥体的底)和一个变量(锥体的高)height,一个带参数的构造方法,一个换底方法getbottom(),一个锥体体积的计算方法volume()。
④声明一个主类Exp6_1
在主方法中声明接口和锥体类的对象,输出锥体的底面积和锥体的体积(bottom*height/3)。
2、要求:
能够上机编辑、调试java程序;
3、实验安排方式:
每组1人,独立完成上机实验;
三、实验环境
硬件环境:微型计算机一台。
软件环境:Window XP/7/8/10操作系统、Eclipse、JDK。
四、核心代码及运行效果
无注释版
(1):
Circle类:
public class Circle {
private double radius;
public Circle() {
}
public Circle(double radius) {
this.radius = radius;
}
public double getRadius() {
return radius;
}
public void setRadius(double radius) {
this.radius = radius;
}
public double getArea(double r) {
return Math.PI * Math.pow(r, 2);
}
}
Cone类:
public class Cone {
private double h;
private double r;
public Cone() {
}
public Cone(double h, double r) {
this.h = h;
this.r = r;
}
public double getH() {
return h;
}
public void setH(double h) {
this.h = h;
}
public double getR() {
return r;
}
public void setR(double r) {
this.r = r;
}
public double getVolume(double h, double r) {
return Math.PI * Math.pow(r, 2) * h;
}
}
Cylinder类:
public class Cylinder {
private double h;
private double r;
public Cylinder() {
}
public Cylinder(double h, double r) {
this.h = h;
this.r = r;
}
public double getH() {
return h;
}
public void setH(double h) {
this.h = h;
}
public double getR() {
return r;
}
public void setR(double r) {
this.r = r;
}
public double getVolume(double h, double r) {
return Math.PI * Math.pow(r, 2) * h / 3;
}
}
Test类:
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
Circle c1 = new Circle();
Cone c2 = new Cone();
Cylinder c3 = new Cylinder();
System.out.println("===================圆的面积==================");
System.out.println("请输入圆的半径:");
double r1 = sc.nextDouble();
System.out.printf("%.4f\n", c1.getArea(r1));
System.out.println("===================圆柱的体积==================");
System.out.println("请输入圆柱的半径:");
double r2 = sc.nextDouble();
System.out.println("请输入圆柱的高:");
double h2 = sc.nextDouble();
System.out.printf("%.4f\n", c2.getVolume(h2, r2));
System.out.println("===================圆锥的体积==================");
System.out.println("请输入圆锥的半径:");
double r3 = sc.nextDouble();
System.out.println("请输入圆锥的高:");
double h3 = sc.nextDouble();
System.out.printf("%.4f\n", c3.getVolume(h3, r3));
}
}
(2):
MyClass类 :
public class MyClass {
private int data;
public MyClass() {
}
public MyClass(int data) {
this.data = data;
}
public int getData() {
return data;
}
public void setData(int data) {
this.data = data;
}
}
SubClass类 :
public class SubClass extends MyClass{
private int Mydata;
public SubClass() {
}
public SubClass(int mydata) {
Mydata = mydata;
}
public int getMydata() {
return Mydata;
}
public void setMydata(int mydata) {
Mydata = mydata;
}
}
Test类 :
public class Test {
public static void main(String[] args) {
SubClass sc = new SubClass();
sc.setMydata(2);
sc.setData(5);
System.out.println("获取子类变量和检测子类方法");
System.out.println(sc.getData());
System.out.println("获取父类变量和检测父类方法");
System.out.println(sc.getMydata());
}
}
(3):
Employee类 :
public class Employee {
private String job;
private String name;
public Employee() {
}
public Employee(String job, String name) {
this.job = job;
= name;
}
public String getJob() {
return job;
}
public void setJob(String job) {
this.job = job;
}
public String getName() {
return name;
}
public void setName(String name) {
= name;
}
public void earnings(){
System.out.println("");
};
}
Boss类 :
public class Boss extends Employee{
private int day;
public Boss(int day) {
this.day = day;
}
public Boss(String job, String name, int day) {
super(job, name);
this.day = day;
}
@Override
public void earnings() {
int salary = 1500 * this.day;
System.out.println(this.getJob() + this.getName() +"的工资为:" + salary);
}
public int getDay() {
return day;
}
public void setDay(int day) {
this.day = day;
}
}
HourlyWorker类 :
public class HourlyWorker extends Employee{
private int hour;
public HourlyWorker(int hour) {
this.hour = hour;
}
public HourlyWorker(String job, String name, int hour) {
super(job, name);
this.hour = hour;
}
@Override
public void earnings() {
int salary = 75 * this.hour;
System.out.println(this.getJob() + this.getName() +"的工资为:" + salary);
}
public int getHour() {
return hour;
}
public void setHour(int hour) {
this.hour = hour;
}
}
PieceWorker类 :
public class PieceWorker extends Employee{
private int products;
public PieceWorker(int products) {
this.products = products;
}
public PieceWorker(String job, String name, int products) {
super(job, name);
this.products = products;
}
@Override
public void earnings() {
int salary = 10 * products;
System.out.println(this.getJob() + this.getName() +"的工资为:" + salary);
}
public int getProducts() {
return products;
}
public void setProducts(int products) {
this.products = products;
}
}
Test类 :
public class Test {
public static void main(String[] args) {
Employee []e = new Employee[3];
Employee b = new Boss("boss","张三",4);
Employee p = new PieceWorker("pieceWorker","李四",500);
Employee hw = new HourlyWorker("hourlyWork","王五",40);
e[0] = b;
e[1] = p;
e[2] = hw;
for (Employee employee : e) {
employee.earnings();
}
}
}
(4):
Calculability接口:
public interface Calculability {
double area();
}
Taper类 :
public class Taper {
private double h;
Triangle bottom = new Triangle();
public Taper() {
}
public Taper(double h, Triangle bottom) {
this.h = h;
this.bottom = bottom;
}
public double getH() {
return h;
}
public void setH(double h) {
this.h = h;
}
public Triangle getBottom() {
return bottom;
}
public void setBottom(Triangle bottom) {
this.bottom = bottom;
}
public double volume(){
return bottom.area() * h / 3;
}
}
Triangle类 :
public class Triangle implements Calculability{
private double width;
private double height;
public Triangle() {
}
public Triangle(double width, double height) {
this.width = width;
this.height = height;
}
public double getWidth() {
return width;
}
public void setWidth(double width) {
this.width = width;
}
public double getHeight() {
return height;
}
public void setHeight(double height) {
this.height = height;
}
@Override
public double area() {
return width * height / 2;
}
}
Exp6_1类:
import javax.sound.midi.Soundbank;
import java.util.Scanner;
import java.util.SortedMap;
public class Exp6_1 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
Triangle t = new Triangle();
Taper taper = new Taper();
System.out.println("请输入底面三角形的边长:");
double w = sc.nextDouble();
t.setWidth(w);
System.out.println("请输入底面三角形的高:");
double h = sc.nextDouble();
t.setHeight(h);
System.out.println("请输入椎体的高:");
double H = sc.nextDouble();
taper.setH(H);
taper.setBottom(t);
System.out.printf("%.3f\n",taper.volume());
}
}
五、实验小结
略