类的继承与多态java

  • 格式:docx
  • 大小:20.47 KB
  • 文档页数:7

实验四 类的继承与多态 谢先斌 一、实验目的

1. 掌握构造方法和成员方法重载的应用。 2. 理解类的继承性的作用 3. 领会面向对象编程的多态性。

二、实验内容与要求

1、定义一个圆类Circle,成员变量:半径 radius; 成员方法:构造方法、get和set半径的方法、计算面积和周长的方法。 定义圆柱和圆锥类,定义相应的变量成员和成员方法。 使用以上类编程,输出圆柱和圆锥面积和体积。

import java.util.Scanner; public class TheCircles { public static void main(String[] args){ Scanner input=new Scanner(System.in); int h,r; System.out.print("请输入圆的半径:"); r=input.nextInt(); Circle c=new Circle(); c.set(r); System.out.println("圆的半径为:"+c.get()+"\n圆的面积为:"+c.area()+"\n圆的周长为:"+c.circum()+"\n");

System.out.print("请输入圆柱的低面半径h="); h=input.nextInt(); System.out.print("请输入圆柱的高r="); r=input.nextInt(); Cylin cy=new Cylin(r,h); System.out.println("圆柱的表面积为:"+cy.area()+"\n体积为:"+cy.Volume()+"\n");

System.out.print("请输入圆锥的低面半径h="); h=input.nextInt(); System.out.print("请输入圆锥的高r="); r=input.nextInt(); Cone co=new Cone(r,h); System.out.println("圆柱的表面积为:"+co.area()+"\n体积为:"+co.Volume()+"\n"); } } class Circle { int radius; public Circle(){} public Circle(int radius){ this.radius=radius; } public void set(int radius) { this.radius=radius; } public int get(){ return radius; } //求面积 public double area(){ return Math.PI*radius*radius; } //求周长 public double circum(){ return Math.PI*radius*2; }

} //定义圆柱类 class Cylin extends Circle { int height;

//构造函数 public Cylin(int radius, int height){ super(radius); this.height=height; }

//求表面积 public double area(){ return Math.PI*radius*radius+2*Math.PI*radius*height; }

//求体积 public double Volume(){ return Math.PI*radius*radius*height; } }

//定义圆锥类 class Cone extends Circle{ int height;

//构造器 public Cone(int radius, int height){ super(radius); this.height=height; }

//求表面积 public double area(){ double length; length=Math.sqrt(height*height+radius*radius); return Math.PI*radius*radius+Math.PI*(2*Math.PI*radius)*length; }

//求体积 public double Volume(){ return Math.PI*radius*radius*height/3; } }

2、声明一个类MyClass,包含一个整型变量data和封装这个变量的两个方法getData()和setData()。声明一个该类的子类SubClass,包含一个整型变量Mydata和封装这个变量的两个方法getMydata()和setMydata(),编写主程序检查SubClass类中的所有变量与方法(包括继承自父类的变量和方法。提示:参照下页的源程序。

import java.util.*; public class TheClass { public static void main(String[] args){ int n; Scanner in=new Scanner(System.in); System.out.print("请输入一个n:"); n=in.nextInt(); SubClass sub=new SubClass(); sub.setData(n); System.out.println("前"+sub.getData()+"的和为:"+sub.Sum());

} } class MyClass{ int data; public MyClass(){

} public int getData() { return data; } public void setData(int data){ this.data=data; } }

class SubClass extends MyClass{ int Mydata; public SubClass() {

} public int getData(){ return Mydata; } public void setData(int Mydata){ this.Mydata=Mydata; }

//求前Mydata项和 public int Sum(){ int i,sum; sum=0; for(i=1;i<=Mydata;i++) sum+=i; return sum; } }

3、下面给出一个根据雇员类型利用多态性完成工资单计算的程序。定义一个类Employee作为超类,Employee的子类有Boss(每星期发给他固定工资,而不计工作时间)、PieceWorker(按其生产的产品数发放工资)、HourlyWorker(根据工作时间长短发放工资)。对所有雇员类型都使用earnings()方法完成其工资单的计算,但每个人挣的工资按他所属的雇员类计算,所有雇员类都是从超类Employee派出生的。所以在超类中声明earnings()方法,该方法没有实质性工作,而是在每个子类都提供恰当的earnings()方法的重写。为了计算雇员的工资,程序仅使用雇员对象的一个超类引导并调用earnings()方法。

import java.util.*; public class theEmployee { public void theMuse(){ System.out.println("请选择员工类型:"); System.out.println("1.Boss"); System.out.println("2.PieceWorker"); System.out.println("3.HourlyWorker"); System.out.println("0.Exit"); } public static void main(String[] args){ theEmployee e=new theEmployee(); e.theMuse(); int n; boolean flag=true; Scanner input=new Scanner(System.in); n=input.nextInt();

Boss b=new Boss(); PieceWorker pw=new PieceWorker(); HourlyWorker hw=new HourlyWorker();

while(n>=0||n<4){ switch(n){ case 0: flag=false; break; case 1: b.earnings(); break; case 2: pw.earnings(); break; case 3: hw.earnings(); break; default:break; }

if(!flag)