Java 多态 继承 封装 的完美体现
模拟龟兔赛跑
实现方法:
1.定义一个抽象类Animal 继承Thread类
2.在animal类中定义抽象方法 runing 然后在重写的run方法中调用
3.创建一个接口 并声明一个接口对象 用于后面作为回调函数使用
4.子类去重写running方法:
5.回调类
6.主函数
6.完整源码:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.Scanner;
abstract class Animal extends Thread{
public int length=200;
public abstract void runing();
public void run() {
//super.run();
while(length>0) {
runing();
}
}
public static interface Callback{
public void win();
}
public Callback callback;
}
class Rabbit extends Animal{
public Rabbit() {
setName("兔子");
}
public void runing() {
int dist=5;
length-=dist;
System.out.println("兔子跑了"+dist+".米,距离终点还有"+length+"米");
if(length<=0) {
length=0;
System.out.println("兔子获得了胜利");
if(callback!=null) {
callback.win();
}
}
try {
if((2000-length)%20==0) {
sleep(100);
}else {
sleep(100);
}
}catch(InterruptedException e) {
e.printStackTrace();
}
}
}
class Tortoise extends Animal{
public Tortoise() {
setName("乌龟");
}
public void runing() {
int dist=2;
length-=dist;
System.out.println("乌龟跑了"+dist+"米,距离终点还有"+length+"米");
if(length<=0) {
length=0;
System.out.println("乌龟获得了胜利");
if(callback!=null) {
callback.win();//兔子调用回调接口 兔子调用回调接口
}
}
try {
sleep(100);//th1.join() catch(InterruptedException e)
}
catch(InterruptedException e) {
e.printStackTrace();
}
}
}
class LetOneStop implements Animal.Callback{
Animal an;
public LetOneStop(Animal an) {//多态思想的完美体现
this.an=an;
}
@SuppressWarnings("deprecation")
public void win() {
an.stop();//和父类共同拥有stop()方法
}
}
public class Tencent {
public static void main(String[] args) {
Tortoise tortoise=new Tortoise();
Rabbit rabbit=new Rabbit();
LetOneStop letOneStop1=new LetOneStop(tortoise);
//让兔子的回调方法里面存在乌龟对象的值 可以把乌龟stop
rabbit.callback=letOneStop1;
LetOneStop letOneStop2=new LetOneStop(rabbit);
tortoise.callback=letOneStop2;
tortoise.start();
rabbit.start();
}
}