|--需求说明

利用多态特性,创建一个手机类Phones,定义打电话的方式call,创建三个子类,并在各自的方法中重写方法,编写程序入口main()方法,实现两种手机打电话

|--解题思路

采用简单工厂模式,

设计四个角色: 工厂类、抽象产品类、具体产品类
工厂类------具体产品角色的调用者/生产者    (基站:baseStation)

抽象产品类------申明成抽象类或一个接口,是具体产品角色的一个定义,是客户看到的东西  (Phones)
具体产品类------就是具体的产品     (IPhone,APhone,WPone)
客户类-------客户角色,调用工厂产生具体实例的, 其实就是测试类  (Test)

由一个工厂类,根据客户传入的参数来决定创建/生产哪一种具体产品。

|--代码内容

1 //这个Phones类是一个抽象类
2 public abstract class Phones {
3     //定义一个抽象方法,call,用来被不同的类继承
4     public abstract void call();
5 }

抽象产品类---Phones

1 public class IPone extends Phones{
2 //重写父类的call方法,用来实现具体的苹果手机打电话
3     @Override
4     public void call() {
5         System.out.println("苹果手机打电话");
6     }
7 }

具体产品类----Iphone

1 public class APhone extends Phones {
2 //重写父类的call方法,用来实现具体的安卓手机打电话
3     @Override
4     public void call() {
5         System.out.println("安卓手机打电话");
6     }
7 }

具体产品类---APhone

1 public class WPhone extends Phones {
2 //重写父类的call方法,用来实现具体的Windows手机打电话
3     @Override
4     public void call() {
5         System.out.println("Windows Phone 手机打电话");
6     }
7 }

具体产品类---WPhone

 1 public class BaseStation {
 2     //将抽象产品类Phones作为返回类型,设定打电话方法
 3     public Phones callPhone(String type) {
 4         //判断客户提供的信息,按客户给定的信息判断使用什么样的手机打电话
 5         if (type.equals("iphone")) {
 6             return new IPone();
 7         } else if (type.equals("aphone")) {
 8             return new APhone();
 9         } else {
10             return new WPhone();
11         }
12     }
13 }

工厂类---BaseStation类

 1 import java.util.Scanner;
 2 public class User {
 3     static Scanner sc = new Scanner(System.in);
 4
 5     public static void main(String[] args) {
 6         //设定一个布尔变量,用于判定是不是要继续打电话
 7         boolean flag = false;
 8         //设定一个接受用户输入的变量
 9         String answer;
10         //创建工厂类的实例
11         BaseStation ba = new BaseStation();
12         //创建一个变量用于传递参数
13         String str;
14         do {
15             System.out.println("请问要使用什么手机打电话?1.Iphoen   2.Aphone   3或其他任意键.Wphoen");
16             answer = sc.next();
17             //如果用户按提示按键选择,则str得到一个具体的值
18             if ("1".equals(answer)){
19                 str = "iphone";
20             }else if("2".equals(answer)){
21                 str = "aphone";
22
23             }else {
24                 str = "wphone";
25             }
26             //将工厂类加工的方法传递给抽象产品类
27             Phones phones = ba.callPhone(str);
28             //抽象产品父类动态绑定具体产品类的方法
29             phones.call();
30             System.out.println("还要打电话吗?按n退出,按其他任意字符继续打电话......");
31             answer = sc.next();
32             //按“n”退出,按其他任意键继续
33             if ("n".equals(answer)){
34                 flag = true;
35             }
36             System.out.println("************-------------**********\n\n");
37
38         }while (!flag);
39         System.out.println("嗯,再见,你再用这么多手机打电话老子打死你");
40
41     }
42 }

客户类----User类

|--运行结果

|--错误记录

转载于:https://www.cnblogs.com/twuxian/p/11197381.html

利用多态特性,创建一个手机类Phones,定义打电话的方式call,创建三个子类,并在各自的方法中重写方法,编写程序入口main()方法,实现多种手机打电话...相关推荐

  1. 利用多态特性,编程创建一个手机类Phones,定义打电话方法call()。创建两个子类:苹果手机类IPhone和安卓手机类APhone,并在各自类中重写方法call(),编写程序入口main()方法

    利用多态特性,编程创建一个手机类Phones,定义打电话方法call().创建两个子类:苹果手机类IPhone和安卓手机类APhone,并在各自类中重写方法call(),编写程序入口main()方法, ...

  2. java定义三角类_Java先创建一个point类然后定义trianglete类,在trianglete类中定义三个point的实体表示三角形的三个点。...

    Java先创建一个point类然后定义trianglete类,在trianglete类中定义三个point的实体表示三角形的三个点. 关注:197  答案:1  mip版 解决时间 2021-01-3 ...

  3. java里创建一个长方形类_定义一个长方形类,定义 求周长和面积的方法实例

    /* 定义一个长方形类,定义 求周长和面积的方法, 然后定义一个测试了Test2,进行测试. 长方形的类: 成员变量: 长,宽 成员方法: 求周长:(长+宽)*2; 求面积:长*宽 注意: impor ...

  4. 【Python】经典问题创建一个矩形类,定义方法 属性 初始化

    Hello,大家好,我是乔乔白术!今天还是处理一些我们的习题. # 定义一个矩形类Rectangle: #a. 定义三个方法:get_area()求面积.get_per()求周长,show_all() ...

  5. 创建一个Rectangle类。 添加两个属性width、height,分别表示宽度和高度,添加计算矩形的周长和面积的方法。测试输出一个矩形的周长和面积。

    [Java]创建一个Rectangle类 添加两个属性width.height,分别表示宽度和高度,添加计算矩形的周长和面积的方法.测试输出一个矩形的周长和面积. /*作者:龙蝶 *日期:2020年4 ...

  6. 创建一个 Rectangle类,添加width和lenght两个成员变量 在 Rectangle类中添加两种方法分别计算矩形的周长和面积 编程利用Rectangle输出一个矩形的周长和面积

    创建一个 Rectangle类,添加width和lenght两个成员变量 在 Rectangle类中添加两种方法分别计算矩形的周长和面积 编程利用Rectangle输出一个矩形的周长和面积 publi ...

  7. 90页第三题,创建一个 Rectangle类,添加width和lenght两个成员变量 在 Rectangle类中添加两种方法分别计算矩形的周长和面积 ,编程利用Rectangle输出一个矩形的

    //90页第三题,创建一个 Rectangle类,添加width和lenght两个成员变量 //在 Rectangle类中添加两种方法分别计算矩形的周长和面积 //编程利用Rectangle输出一个矩 ...

  8. 创建一个复数类Complex,对复数进行数学运算

    参考,误抄袭 问题描述: 创建一个复数类Complex,对复数进行数学运算,复数具有如下格式:realPart+imaginaryPart*i,其中,i为-1的平方根,具体要求如下: (1)利用浮点变 ...

  9. 创建一个score类

    本次上机课的任务是创建一个score类,并利用构造函数和析构函数.调用函数等方法,完成对成绩的显示.计算和排序.这次的编程对我来说难度还是比较大的,没有编程的基础对一些程序的逻辑结构不是很理解,所以在 ...

最新文章

  1. PL/SQL第五章 Order by排序
  2. sklearn RandomForest(随机森林)模型使用RandomSearchCV获取最优参数及模型效能可视化
  3. 解决手机訪问站点时总体相对屏幕缩小问题?(已解决)
  4. day5 python学习
  5. python之路----验证客户端合法性
  6. server的自增主键返回函数 sql_SQL自增主键函数
  7. docker搭建mysql主从
  8. Asp.net开发必备51种代码
  9. 兄弟连LAMP环境搭建
  10. hard link and symbolic link
  11. 淘宝宝贝商家编码 管理好你的宝贝
  12. 科学家发现孤独感与大脑中的默认网络有关
  13. ubuntu下回收站无法清空
  14. lcd timg的理解
  15. git 设置本地用户名和邮箱。
  16. 游戏测试和普通测试有什么区别?
  17. 【Nginx-利用Referer防盗链】解决网站被可疑链接调取接口
  18. 【精准三点定位求解汇总】利用Python或JavaScript高德地图开放平台实现精准三点定位(经纬度坐标与平面坐标转换法求解、几何绘图法求解)
  19. 易地推拓客分享培训机构如何玩转拼团营销招生
  20. linux charg修改目录,Thinkpad在GUN/linux(ubuntu)下修改电池充电阈值

热门文章

  1. 机房收费系统之简单的逻辑(上)下机费用运算
  2. addr2line快速定位进程异常位置
  3. Python入门学习作业之猜年龄小游戏制作
  4. 和女生约会去哪里?别急,过来人告诉你:这7个地方包她满意
  5. DC EP要统一“ 世界度量衡”,数字货币打开财富大门
  6. vs2022 系统找不到指定文件
  7. 强制修改LINUX的root密码
  8. 怎么恢复回收站删除的文件?3个方法汇总助您快速解决
  9. 51单片机-流水灯(74LS138、74HC154)
  10. 电路习题解答 第五章 5-5、5-6