JAVA_抽象类和接口
1.编写程序,其中包含一个抽象类Person,两个类:Chinese和American。
(1)抽象类Person中包含一个名为name的变量用于存储姓名,使用构造方法对name进行赋值。
(2)抽象类Person包含一个名为sayHello的公共抽象方法声明,在控制台显示问好信息。
(3)Chinese和American这两个类继承了Person抽象类。
(4)Chinese和American这两个类在sayHello()方法中分别显示“您好,我叫。”和“Hello,my name is ”。
(5)在测试程序PersonTest的main()方法中使用Person定义一个长度为2的一维数组persons,依次存入Chinese(“丁丁”)、American(“Alice”)这两个对象,遍历数组persons,调用sayHello方法显示问好信息。
要求:所有类都存放在一个名为lab0701的包中。
2.现有以下接口的声明:
public interface CalcArea {
double getArea();
}
(1)定义圆类Circle并实现接口CalcArea,圆类的主要成员变量为半径radius,构造方法的参数用于初始化半径。
(2)定义矩形类Rectangle并实现接口CalcArea,矩形类的主要成员变量包括长length和宽width,构造方法的参数用于初始化长和宽。
(3)现有如下类Tester,其功能是求存储在一个数组中的多个图形的面积之和,要求补全其中缺少的代码。
public class Tester {
static **CalcArea[]** shapes = { new Circle(1.0), new Rectangle(3.0, 4.0), new Circle(8.0) };
public static void main(String[] args) {
System.out.println("total area = " + sumArea(shapes));
}
public static double sumArea( **CalcArea[]** shapes) {
double sum = 0;
for(CalcArea c:shapes) {
sum=sum+c.getArea();
}
return sum;
}
}
要求:所有类和接口都存放在一个名为lab0702的包中。
3.学校中有教师和学生两类人,而在职研究生既是教师又是学生。
(1)设计两个接口IStudent和ITeacher。其中,IStudent接口包含setFee()和getFee()方法,分别用于设置和获取学生的学费;ITeacher接口包含setPay()和getPay()方法,分别用于设置和获取教师的工资。
(2)定义一个研究生类Graduate,实现IStudent接口和ITeacher接口。它的私有成员变量有name(姓名,只读),fee(每年的学费),pay(每月的工资)。构造方法用于初始化各个成员变量。定义成员变量的getter和setter方法。
(3)在测试程序GraduateTest中使用Graduate类创建一研究生对象(姓名:李想;学费:2000;工资:9000),统计他的年收入,如果年收入减去一年的学费不足2000元,则输出“需要贷款”信息,否则输出“无需贷款”信息。
要求:所有类都存放在一个名为lab0703的包中。
package lab0701;
public class American extends Person{
American(String name) {
super(name);
// TODO Auto-generated constructor stub
}
void sayHello() {
System.out.println("Hello,My name is"+name);
}
}
package lab0701;
class Chinese extends Person{
Chinese(String name) {
super(name);
// TODO Auto-generated constructor stub
}
void sayHello() {
System.out.println("您好,我叫"+name);
}
}
package lab0701;
abstract class Person {
String name ;
Person(String name ){
this.name=name;
}
void sayHello() {
// System.out.println("你好");
}
}
package lab0701;
public class PersonTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
Person[] persons=new Person[] {new Chinese("叮叮"), new American(" Alice")};
for(Person p:persons) {
p.sayHello();
}
}
}
package lab0702;
public interface CalcArea {
double getArea();
}
package lab0702;
public class Circle implements CalcArea{
double radius;
Circle(double radius){
this.radius=radius;
}
@Override
public double getArea() {
// TODO Auto-generated method stub
return Math.PI*radius*radius;
}
}
package lab0702;
public class Rectangle implements CalcArea{
double length;
double width;
Rectangle(double length,double width){
this.length=length;
this.width=width;
}
@Override
public double getArea() {
// TODO Auto-generated method stub
return length*width;
}
}
package lab0702;
public class Tester {
static CalcArea[] shapes = { new Circle(1.0), new Rectangle(3.0, 4.0), new Circle(8.0) };
public static void main(String[] args) {
System.out.println("total area = " + sumArea(shapes));
}
public static double sumArea( CalcArea[] shapes) {
double sum = 0;
for(CalcArea c:shapes) {
sum=sum+c.getArea();
}
return sum;
}
}
package lab0703;
public class Graduate implements IStudent,ITeacher{
private String name;
private double fee;
private double pay;
public Graduate(String name,double fee,double pay) {
this.setName(name);
this.fee=fee;
this.pay=pay;
}
public double getFee() {
return fee;
}
public void setFee(double fee) {
this.fee = fee;
}
public double getPay() {
return pay;
}
public void setPay(double pay) {
this.pay = pay;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
package lab0703;
//(3)在测试程序GraduateTest中使用Graduate
//类创建一研究生对象(姓名:李想;学费:2000;工资:9000),
//统计他的年收入,如果年收入减去一年的学费不足2000元,
//则输出“需要贷款”信息,否则输出“无需贷款”信息。
public class GraduateTest {
public static void main(String[] args) {
Graduate g = new Graduate("李想",2000,9000);
if(g.getPay()>(g.getFee()+2000)) {
System.out.println("不需要贷款");
}else {
System.out.println("需要贷款");
}
}
}
package lab0703;
// 3.中有教师和学生两类人,而在职研究生既是教师又是学生。
// (1)设计两个接口IStudent和ITeacher。其中,IStudent接
// 口包含setFee()和getFee()方法,分别用于设置和获取学生的学费;
// ITeacher接口包含setPay()和getPay()方法,分别用于设置和获取教师的工资。
public interface IStudent {
public static void setFee() {
}
public static void getFee() {
}
}
package lab0703;
public interface ITeacher {
public static void setPay() {
}
public static void getPay(){
}
}