2.编写Person类,属性有姓名,年龄,在原有Dog类增加一个属性master,为Person类,表示其主人。Dog增加实现Cloneable,实现深拷贝。并定义一个FeedRequest方法,使用定时器,每隔一定时间间隔呼喊主人喂食(打印主人姓名+“请喂食”,并发出Beep声),要求分别用内部类方法实现定时器的ActionListener接口和用lambda表达式的方法。编写驱动类对以上方法进行测试。
时间: 2024-02-15 13:03:37 浏览: 48
好的,我来回答你的问题。
下面是对你的问题的回答:
首先,你的问题是关于编写一个Person类和对Dog类进行修改的。你想要在原有的Dog类中增加一个属性master,表示其主人,并且让Dog类实现Cloneable接口,实现深拷贝。你还想定义一个FeedRequest方法,使用定时器,每隔一定时间间隔呼喊主人喂食,并发出Beep声,并要求分别用内部类方法实现定时器的ActionListener接口和用lambda表达式的方法。最后,你想编写一个驱动类对以上方法进行测试。
那么,我们可以先来看一下Person类的实现:
```java
public class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
}
```
Person类有两个属性:姓名和年龄,我们可以通过构造方法来设置这些属性,并且通过公共的getter方法来获取这些属性的值。
接下来,我们可以对Dog类进行修改,增加一个属性master,表示其主人,并且让Dog类实现Cloneable接口,实现深拷贝。修改后的Dog类如下所示:
```java
public class Dog implements Cloneable {
private String name;
private int age;
private Person master;
public Dog(String name, int age, Person master) {
this.name = name;
this.age = age;
this.master = master;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
public Person getMaster() {
return master;
}
public void setMaster(Person master) {
this.master = master;
}
@Override
public Dog clone() {
try {
Dog clonedDog = (Dog) super.clone();
clonedDog.master = this.master.clone();
return clonedDog;
} catch (CloneNotSupportedException e) {
return null;
}
}
}
```
我们在Dog类中增加了一个属性master,表示其主人。我们通过构造方法来设置这个属性,并且通过公共的getter和setter方法来获取和设置这个属性的值。我们还让Dog类实现了Cloneable接口,并且实现了深拷贝方法clone(),这样我们就可以对Dog类进行深拷贝操作。
最后,我们可以定义一个FeedRequest方法,使用定时器,每隔一定时间间隔呼喊主人喂食,并发出Beep声,并分别用内部类方法实现定时器的ActionListener接口和用lambda表达式的方法。实现代码如下:
```java
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Timer;
import java.util.TimerTask;
public class DogFeeder {
private static final int INTERVAL = 5000; // 每隔5秒钟呼喊一次
public static void main(String[] args) {
// 创建一个Person对象作为狗的主人
Person master = new Person("张三", 30);
// 创建一个Dog对象
Dog dog = new Dog("旺财", 3, master);
// 内部类方法实现定时器的ActionListener接口
class FeedRequestListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println(dog.getMaster().getName() + "请喂食");
Toolkit.getDefaultToolkit().beep();
}
}
// lambda表达式实现定时器的ActionListener接口
ActionListener feedRequestListenerLambda = e -> {
System.out.println(dog.getMaster().getName() + "请喂食");
Toolkit.getDefaultToolkit().beep();
};
// 使用内部类方法实现定时器
Timer timer1 = new Timer();
timer1.schedule(new TimerTask() {
@Override
public void run() {
FeedRequestListener listener = new FeedRequestListener();
listener.actionPerformed(null);
}
}, INTERVAL, INTERVAL);
// 使用lambda表达式实现定时器
Timer timer2 = new Timer();
timer2.schedule(new TimerTask() {
@Override
public void run() {
feedRequestListenerLambda.actionPerformed(null);
}
}, INTERVAL, INTERVAL);
}
}
```
在main方法中,我们先创建一个Person对象作为狗的主人,然后创建一个Dog对象。接下来,我们分别使用内部类方法和lambda表达式来实现定时器的ActionListener接口,然后使用Timer类来实现定时器。在每次定时器触发时,我们会调用FeedRequest方法,并打印出狗的主人的姓名并发出Beep声。
这样,我们就完成了对Person类和Dog类进行修改,并且定义了一个FeedRequest方法,使用定时器,每隔一定时间间隔呼喊主人喂食,并发出Beep声,并分别用内部类方法实现定时器的ActionListener接口和用lambda表达式的方法。最后,我们编写了一个驱动类对以上方法进行测试。
阅读全文