利用多态特性,创建一个手机类Phones,定义打电话的方式call,创建三个子类,并在各自的方法中重写方法,编写程序入口main()方法,实现多种手机打电话...
|--需求说明
利用多态特性,创建一个手机类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()方法,实现多种手机打电话...相关推荐
- 利用多态特性,编程创建一个手机类Phones,定义打电话方法call()。创建两个子类:苹果手机类IPhone和安卓手机类APhone,并在各自类中重写方法call(),编写程序入口main()方法
利用多态特性,编程创建一个手机类Phones,定义打电话方法call().创建两个子类:苹果手机类IPhone和安卓手机类APhone,并在各自类中重写方法call(),编写程序入口main()方法, ...
- java定义三角类_Java先创建一个point类然后定义trianglete类,在trianglete类中定义三个point的实体表示三角形的三个点。...
Java先创建一个point类然后定义trianglete类,在trianglete类中定义三个point的实体表示三角形的三个点. 关注:197 答案:1 mip版 解决时间 2021-01-3 ...
- java里创建一个长方形类_定义一个长方形类,定义 求周长和面积的方法实例
/* 定义一个长方形类,定义 求周长和面积的方法, 然后定义一个测试了Test2,进行测试. 长方形的类: 成员变量: 长,宽 成员方法: 求周长:(长+宽)*2; 求面积:长*宽 注意: impor ...
- 【Python】经典问题创建一个矩形类,定义方法 属性 初始化
Hello,大家好,我是乔乔白术!今天还是处理一些我们的习题. # 定义一个矩形类Rectangle: #a. 定义三个方法:get_area()求面积.get_per()求周长,show_all() ...
- 创建一个Rectangle类。 添加两个属性width、height,分别表示宽度和高度,添加计算矩形的周长和面积的方法。测试输出一个矩形的周长和面积。
[Java]创建一个Rectangle类 添加两个属性width.height,分别表示宽度和高度,添加计算矩形的周长和面积的方法.测试输出一个矩形的周长和面积. /*作者:龙蝶 *日期:2020年4 ...
- 创建一个 Rectangle类,添加width和lenght两个成员变量 在 Rectangle类中添加两种方法分别计算矩形的周长和面积 编程利用Rectangle输出一个矩形的周长和面积
创建一个 Rectangle类,添加width和lenght两个成员变量 在 Rectangle类中添加两种方法分别计算矩形的周长和面积 编程利用Rectangle输出一个矩形的周长和面积 publi ...
- 90页第三题,创建一个 Rectangle类,添加width和lenght两个成员变量 在 Rectangle类中添加两种方法分别计算矩形的周长和面积 ,编程利用Rectangle输出一个矩形的
//90页第三题,创建一个 Rectangle类,添加width和lenght两个成员变量 //在 Rectangle类中添加两种方法分别计算矩形的周长和面积 //编程利用Rectangle输出一个矩 ...
- 创建一个复数类Complex,对复数进行数学运算
参考,误抄袭 问题描述: 创建一个复数类Complex,对复数进行数学运算,复数具有如下格式:realPart+imaginaryPart*i,其中,i为-1的平方根,具体要求如下: (1)利用浮点变 ...
- 创建一个score类
本次上机课的任务是创建一个score类,并利用构造函数和析构函数.调用函数等方法,完成对成绩的显示.计算和排序.这次的编程对我来说难度还是比较大的,没有编程的基础对一些程序的逻辑结构不是很理解,所以在 ...
最新文章
- PL/SQL第五章 Order by排序
- sklearn RandomForest(随机森林)模型使用RandomSearchCV获取最优参数及模型效能可视化
- 解决手机訪问站点时总体相对屏幕缩小问题?(已解决)
- day5 python学习
- python之路----验证客户端合法性
- server的自增主键返回函数 sql_SQL自增主键函数
- docker搭建mysql主从
- Asp.net开发必备51种代码
- 兄弟连LAMP环境搭建
- hard link and symbolic link
- 淘宝宝贝商家编码 管理好你的宝贝
- 科学家发现孤独感与大脑中的默认网络有关
- ubuntu下回收站无法清空
- lcd timg的理解
- git 设置本地用户名和邮箱。
- 游戏测试和普通测试有什么区别?
- 【Nginx-利用Referer防盗链】解决网站被可疑链接调取接口
- 【精准三点定位求解汇总】利用Python或JavaScript高德地图开放平台实现精准三点定位(经纬度坐标与平面坐标转换法求解、几何绘图法求解)
- 易地推拓客分享培训机构如何玩转拼团营销招生
- linux charg修改目录,Thinkpad在GUN/linux(ubuntu)下修改电池充电阈值