学校中有教师和学生两类人,而在职研究生既是教师又是学生。设计两个接口IStudent和ITeacher。其中,IStudent接口包含displayFee()方法用于显示学费;ITeacher接口包含displayPay()方法,用于显示教师的工资。
(1)定义一个学生类Student,它的成员变量有name,sex,age,fee。创建姓名为“Liping”的学生,他的学费为5000元。
(2)定义一个在职研究生类Graduate,它的成员变量有name,sex,age,fee,pay。创建一个姓名为“zhangsan”的研究生,统计他的年收入和学费,如果收入减去学费不足2000元,则显示学费时同时提示“provide a loan”(需要贷款)信息。 要求:在Graduate、Student中实现各个接口定义方法。 用接口变量调用接口方法 Student
> stu=new Student();
> IStudent is;
> is=stu;
> is. displayFee()
**
具体代码实现:
package edu.dali.dd;
public interface IStudent {
public void displayFee();
}
package edu.dali.dd;
public interface ITeacher {
public void displayPay();
}
package edu.dali.model;
import edu.dali.dd.*;
public class Graduates implements IStudent,ITeacher {
private String name;
private String sex;
private String age;
private int fee;
private int pay;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public int getFee() {
return fee;
}
public void setFee(int fee) {
this.fee = fee;
}
public int getPay() {
return pay;
}
public void setPay(int pay) {
this.pay = pay;
}
public void displayPay() {
System.out.println("工资是:"+getPay()+"元");
}
public void displayFee() {
if(pay-fee<2000) {
System.out.println("provide a loan");
System.out.println("学费是:"+getFee()+"元");
}else {
System.out.println("学费是:"+getFee()+"元");
}
}
}
package edu.dali.model;
import edu.dali.dd.*;
public class Student implements IStudent {
private String name;
private String sex;
private String age;
private int fee;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public int getFee() {
return fee;
}
public void setFee(int fee) {
this.fee = fee;
}
public void displayFee() {
// TODO 自动生成的方法存根
System.out.println("学费是:"+getFee());
}
}
package edu.dali.stest;
import edu.dali.model.*;
import edu.dali.dd.*;
public class Test {
public static void main(String[] args) {
Graduates g=new Graduates();
// TODO 自动生成的方法存根
g.setName("Alice");
g.setSex("man");
g.setAge("18");
g.setPay(8000);
g.setFee(5000);
System.out.println("姓名:"+g.getName());
System.out.println("性别:"+g.getSex());
System.out.println("年龄:"+g.getAge());
IStudent ist;
ITeacher ite;
ist=g;
ite=g;
ite.displayPay();
ist.displayFee();
Student s=new Student();
s.setName("Liping");
s.setSex("女");
s.setAge("21");
s.setFee(5000);
System.out.println("姓名:"+s.getName());
System.out.println("性别:"+s.getSex());
System.out.println("年龄:"+s.getAge());
IStudent is;
is=s;
is.displayFee();
}
}
**
2.实现类似植物大战僵尸游戏对象模型,需求如下:
1)有坚果墙、樱桃炸弹、西瓜投手三种植物,所有的植物都要消耗阳光,每种植物消耗阳光值不一样,坚果墙与西瓜投手会防御但防御值不一样,樱桃炸弹会攻击。
2)有FlagZombie、NormalZombie两种僵尸,都会防御与攻击,但防御与攻击能力不一样。
根据以上需求,设计并实现对象模型及相应接口,具体要求下如:
1)建立植物及僵尸两个抽象类作为父类,并建立坚果墙、樱桃炸弹、西瓜投手植物子类,建立FlagZombie、NormalZombie两种僵尸子类,创建相应的属性(名称、颜色、阳光值、生命值等)。
2)将消耗阳光、防御、攻击方法封装至三个不同的接口里。
3)根据需求对不同的植物或僵尸实现不同的接口,并实现应用的方法,方法功能只需作相应的文字输出即可。
4)对对象模型作测试。
package edu.dali.panttest;
import edu.dali.plant.Plant;
import edu.dali.plant.servece.IGongji;
public class Cherry extends Plant implements IGongji {
@Override
public void g() {
System.out.println("我会爆炸");
// TODO 自动生成的方法存根
}
@Override
public void xhsun() {
// TODO 自动生成的方法存根
System.out.println("我消耗的阳光是:"+500);
}
}
package edu.dali.panttest;
import edu.dali.plant.Plant;
import edu.dali.plant.servece.IFangYu;
public class jgwall extends Plant implements IFangYu {
@Override
public void f() {
// TODO 自动生成的方法存根
System.out.println("我会防御");
}
@Override
public void xhsun() {
// TODO 自动生成的方法存根
System.out.println("我消耗的阳光是:"+600);
}
}
package edu.dali.panttest;
import edu.dali.plant.Plant;
import edu.dali.plant.servece.IFangYu;
public class watemelon extends Plant implements IFangYu {
@Override
public void f() {
// TODO 自动生成的方法存根
System.out.println("我会防御");
}
@Override
public void xhsun() {
// TODO 自动生成的方法存根
System.out.println("我消耗的阳光是:"+800);
}
}
package edu.dali.plant;
public abstract class Plant {
private String name;
private String color;
private String sun;
private String lifezhi;
public String getLifezhi() {
return lifezhi;
}
public void setLifezhi(String lifezhi) {
this.lifezhi = lifezhi;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
public String getSun() {
return sun;
}
public void setSun(String sun) {
this.sun = sun;
}
public abstract void xhsun() ;
}
``
package edu.dali.plant.servece;
public interface IFangYu {
public void f();
}
package edu.dali.plant.servece;
public interface IGongji {
public void g();
}
package Zombie;
import edu.dali.plant.servece.IFangYu;
import edu.dali.plant.servece.IGongji;
public class FlagZombie extends Zombie implements IGongji,IFangYu {
@Override
public void f() {
// TODO 自动生成的方法存根
System.out.println("我会用旗子保护自己");
}
@Override
public void g() {
// TODO 自动生成的方法存根
System.out.println("我会丢旗子攻击植物");
}
}
package Zombie;
import edu.dali.plant.servece.IFangYu;
import edu.dali.plant.servece.IGongji;
public class NoramlZombie extends Zombie implements IGongji,IFangYu {
@Override
public void g() {
System.out.println("我会攻击植物");
// TODO 自动生成的方法存根
}
@Override
public void f() {
System.out.println("我会防御保护");
// TODO 自动生成的方法存根
}
}
package Zombie;
public abstract class Zombie {
private String name;
private String color;
private String sunshi;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
public String getSunshi() {
return sunshi;
}
public void setSunshi(String sunshi) {
this.sunshi = sunshi;
}
public String getLifezhi() {
return lifezhi;
}
public void setLifezhi(String lifezhi) {
this.lifezhi = lifezhi;
}
private String lifezhi;
}
package edu.dali.testZombbie;
import edu.dali.plant.Plant;
import edu.dali.plant.servece.*;
import Zombie.FlagZombie;
import Zombie.NoramlZombie;
import Zombie.Zombie;
import edu.dali.panttest.*;
public class ZZtest {
public static void main(String[] args) {
jgwall c1 = new jgwall();
IFangYu f1;
// TODO 自动生成的方法存根
c1.setName("坚果墙");
c1.setColor("yellow");
c1.setLifezhi("200");
c1.setSun("50");
System.out.println("我的姓名:"+c1.getName()+":"+"我的颜色:"+c1.getColor()+":"+"我的阳光值:"+c1.getSun()+":"+"我的生命值"+c1.getLifezhi());
c1.xhsun();
f1=(jgwall)c1;
f1.f();
watemelon c2= new watemelon();
IFangYu f2;
c2.setName("西瓜投手");
c2.setColor("green");
c2.setLifezhi("560");
c2.setSun("350");
System.out.println("我的姓名:"+c2.getName()+":"+"我的颜色:"+c2.getColor()+":"+"我的阳光值:"+c2.getSun()+":"+"我的生命值"+c2.getLifezhi());
c2.xhsun();
f2=(watemelon)c2;
f2.f();
Cherry c3=new Cherry();
IGongji a;
c3.setName("樱桃炸弹");
c3.setColor("red");
c3.setLifezhi("200");
c3.setSun("150");
System.out.println("我的姓名:"+c3.getName()+":"+"我的颜色:"+c3.getColor()+":"+"我的阳光值:"+c3.getSun()+":"+"我的生命值"+c3.getLifezhi());
c3.xhsun();
a=(Cherry)c3;
a.g();
Zombie z1;
IGongji a1;
IFangYu f3;
z1=new FlagZombie();
z1.setName("旗子僵尸");
z1.setColor("black");
z1.setLifezhi("1000");
z1.setSunshi("45");
System.out.println("我的姓名:"+z1.getName()+":"+"我的颜色:"+z1.getColor()+":"+"我的生命值:"+z1.getLifezhi()+":"+"我的生命损失:"+z1.getSunshi());
a1=(FlagZombie)z1;
a1.g();
f3=(FlagZombie)z1;
f3.f();
Zombie z2;
IGongji a2;
IFangYu f4;
z2=new FlagZombie();
z2.setName("普通僵尸");
z2.setColor("black");
z2.setLifezhi("400");
z2.setSunshi("10");
System.out.println("我的姓名:"+z2.getName()+":"+"我的颜色:"+z2.getColor()+":"+"我的生命值:"+z2.getLifezhi()+":"+"我的生命损失:"+z2.getSunshi());
a2=(NoramlZombie)z2;
a2.g();
f4=(NoramlZombie)z2;
f4.f();
}
}