10.25第九周java作业

来源:互联网 发布:淘宝空间图片协议 编辑:程序博客网 时间:2024/06/04 19:37

课堂练习1:教材160页4.编程题

设计一个动物声音“模拟器”,希望模拟器可以模拟许多动物的叫声,要求如下。

编写接口Animal 

Animal接口有两个抽象方法cry()和getAnimalName(),即要求实现该接口的各种具体的动物类给出自己的叫声和种类名称。

编写模拟器类Simulator 
该类有一个playSound(Animal animal)方法,该方法的参数是Animal类型,即参数animal可以调用实现Animal接口类重写的cry()方法播放具体动物的声音,调用重写的getAnimalName()方法显示动物种类的名称。

编写实现Anima接口l的Dog类和Cat类 
编写主类Application(用户程序) 

实现代码:

Animal接口:
package j1025;

public interface Animal {

public abstract void cry();
public abstract String getAnimalName();
}

Simulator类:

package j1025;
public class Simulator {
void playSound(Animal animal){
System.out.println(animal.getAnimalName());
animal.cry();
}
}

Dog类:

package j1025;
public class Dog extends Simulator implements Animal {
public void cry(){
System.out.println("wang wang wang");
}
public String getAnimalName(){
return "dog";
}
}

Cat类:

package j1025;
public class Cat extends Simulator implements Animal {
public void cry(){
System.out.println("miao miao miao");
}
public String getAnimalName(){
return "cat";
}
}

测试类:

package j1025;
public class Test {
public static void main(String[] args) {
Simulator simulator=new Simulator();
simulator.playSound(new Dog());
simulator.playSound(new Cat());
}
}

测试结果图:


课堂练习2:大学里的学生(Student)需要交学费,而研究生(Graduate)作为学生比较特殊,除了需要交学费外,还可以获取一部分科研津贴,由学校(University)统一发放。此外,学校还需要发放教师(Teacher)的工资。

编写代码模拟上述场景:

1)     设计抽象类Student:

属性包括姓名(name)、学费(fee);

方法包括:

-构造方法Student(String name)

-抽象方法void setFee(int fee)

-抽象方法int getFee()

2) 定义一个接口Salary:包含一个方法int getSalary();

3) 定义一个研究生类Graduate,继承Student类且实现Salary接口:

新增属性:收入(salary)

方法包括:

- 构造方法Graduate(String name)

- 重写void setFee(int fee)

- 重写int getFee()

- 重写int getSalary(),研究生获得工资1500

- 新增方法boolean isLoan(),判断是否需要贷款(若收入小于学费则需贷款)

4) 定义一个教师类(Teacher):

属性包括:姓名(name)、收入(salary)

方法包括:

- 构造方法Teacher(String name)

- 重写int getSalary(),教师获得工资3000

       5) 定义一个大学类(University),通过void payOff(Salary s)方法给研究生和教师发放并打印工资。

       6)定义主类Test,主函数中至少包括以下代码:



代码实现:

抽象类Student:

package j1025;
public abstract class Student {
String name;
int fee;
Student(String name)
{
this.name=name;
}
abstract void setFee(int fee);
abstract int getFee();

}

接口Salary:

package j1025;
public interface Salary {
public abstract  int getSalary();
}

Graduate类:

package j1025;
public class Graduate extends Student implements Salary  {
int salary;
Graduate(String name)
{
super(name);
System.out.println("研究生的名字为:"+name);
salary=1500;
}
void setFee(int fee)
{
super.fee=fee;
}
int getFee()
{
return fee;
}
public int getSalary()
{
return salary;
}
boolean isLoan(){
if(salary<fee)
return true;
else
return false;
}
}

Teacher类:

package j1025;
public class Teacher implements Salary{
String name;
int salary=3000;
Teacher(String name){
this.name=name;
System.out.println("教师的名字为:"+name);
}
public int getSalary()
{
return salary;
}
}

University类:

package j1025;
public class University{
void payOff(Salary s)
{
System.out.println("工资为:"+s.getSalary());

}
}

测试类:

package j1025;
public class Test1 {
public static void main(String[] args) {
Graduate g=new Graduate("小亮");
g.setFee(1000);
University u=new University();
u.payOff(g);
System.out.println("是否需要贷款:"+g.isLoan());
Teacher t=new Teacher("大王");
u.payOff(t);
}
}

测试结果:



接口小结:

•接口就是一些方法特征的集合。
•接口的定义:用interface关键字
•接口的属性只能为公共、静态常量,即需要用用关键字public、static、final修饰。但是这三个关键字可以省略。
•接口的方法只能是公共的抽象方法,即用关键字public和abstract修饰,但是这两个关键字可以省略。
•接口和抽象类的用法类似!
•接口和抽象类的区别:从语法上看一个类可以实现多个接口,但是一个类只能有一个父类。
•接口的实现:通过类使用implements关键字类实现。
接口回调:可以把实现某一接口类创建的对象的引用赋值给该接口声明的接口变量,那么该接口变量就可以调用被类实现的接口的方法。