1. 定义手机类
行为:打电话,发短信
2. 定义接口IPlay
行为:玩游戏
3. 定义旧手机类继承手机类
行为:继承父类的行为
4. 定义新手机继承手机类实现IPlay接口
行为:继承父类的行为,重写玩游戏方法
5. 定义测试类
在测试类中定义一个 用手机的方法,要求该方法既能接收老手机对象,也能接收新手机对象
在该方法内部调用打电话,发短信以及新手机特有的玩游戏方法
#定义手机类(父类)
//手机类
public abstract class Phone {
//1. 定义手机类
// 行为:打电话,发短信
public abstract void call();
public abstract void sendMessage();
}
#定义接口IPlay
public interface IPlay {
//2. 定义接口IPlay
// 行为:玩游戏
public abstract void playgame();
}
#定义旧手机类继承手机类(子类)
public class OldPhone extends Phone{
//3. 定义旧手机类继承手机类
// 行为:继承父类的行为
@Override
public void call() {
System.out.println("旧手机打电话");
}
@Override
public void sendMessage() {
System.out.println("旧手机发信息");
}
}
#定义新手机继承手机类实现IPlay接口(子类)
public class NewPhone extends Phone implements IPlay{
//4. 定义新手机继承手机类实现IPlay接口
// 行为:继承父类的行为,重写玩游戏方法
@Override
public void call() {
System.out.println("用新手机打电话");
}
@Override
public void sendMessage() {
System.out.println("用新手机发信息");
}
@Override
public void playgame() {
System.out.println("用新手机玩游戏");
}
}
#定义测试类
public class Test2 {
public static void main(String[] args) {
//创建对象并向上转型
Phone np = new NewPhone();
Phone op = new OldPhone();
testPhone(np); //新手机的测试
testPhone(op); //旧手机的测试
}
//测试手机方法
public static void testPhone(Phone p){
p.call();
p.sendMessage();
//通过instanceof判断父类是否通过子类NewPhone
if(p instanceof NewPhone){
//如果通过则要向下转型实现子类的方法
NewPhone Np = (NewPhone)p;
Np.playgame();
//((NewPhone)p).playgame();
}
}
}