帮来解决一下几个问题!谢谢了.!

xianrenxw 2008-09-28 12:23:59
利用继承机制完成, 模拟移动的计费程序.
要求:
1. 可以满足现有业务:如"神舟行", "全球通" 等业务.
2. 现在增加一个业务"大灵通" , 要求不用改变原有的计算程序.
3. 要求自定义一个类,用于处理异常情况.如余额不够,时间格式不对等.

提示:
1. 建一个抽象类, PhoneCard. 具有初始金额,余额等信息,有一个计算方法caculate() 方法,用来计算余额.
2. 具体业务从PhoneCard 继承,覆盖父类的caculate()方法, 计算账户余额.原有系统计算程序过程如下:

for(...){
//调用phoneCard的caculate()方法,并打印信息
}

信息:
神舟行: 接.拨0.60/分
大灵通: 16元包接听,拨0.25/分
全球通: 26元座机费, 0.40/分(拨,接)


这一题, 我开始感觉做得差不多了, 不过感觉做不好, 所以发出来给大家给我分析一下. 最好先说下你们的思路, 做题 , 思路是很重要的.

还有一走红理论东西 , 弄得不是很清楚.

1. 子类如何调用父类的private成员变量

2. 父类能否调用子类的 方法和变量, 听人说好像只能调用子类覆盖了父类的方法 .

就这里子类跟 父类之间 调用,, 引用对象, 完全都是迷迷糊糊的. 今天考试考得很糙!>.
...全文
242 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
syzhwh 2008-09-29
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 yakoo5 的回复:]
子类如何调用父类的private成员变量:
在父类中添加get方法,设置为public,返回private成员变量的值,然后在子类中调用这个get方法
[/Quote]


这样可以啊
xianrenxw 2008-09-29
  • 打赏
  • 举报
回复
晕, 你们都只回答我的第二个问题.


那个 利用继承机制完成, 模拟移动的计费程序. 怎么没人贴出代码给我看看啊...

谢谢!!!!!
C0150 2008-09-29
  • 打赏
  • 举报
回复
1. 子类如何调用父类的private成员变量

private 修饰的变量、方法,都只能被本类调用,不能被其他任何类调用的。
2. 父类能否调用子类的 方法和变量, 听人说好像只能调用子类覆盖了父类的方法 .
子类可以覆盖父类的方法,可以重写父类的方法、继承父类等等,但是不能倒过来的。。。
xieyours 2008-09-29
  • 打赏
  • 举报
回复
*************************************************************
仅供参考,如有不足之处,请指教!
*************************************************************

/**
* 利用继承机制完成, 模拟移动的计费程序. 要求: 1. 可以满足现有业务:如"神舟行", "全球通" 等业务. 2. 现在增加一个业务"大灵通" ,
* 要求不用改变原有的计算程序. 3. 要求自定义一个类,用于处理异常情况.如余额不够,时间格式不对等.
*
* 提示: 1. 建一个抽象类, PhoneCard. 具有初始金额,余额等信息,有一个计算方法caculate() 方法,用来计算余额. 2.
* 具体业务从PhoneCard 继承,覆盖父类的caculate()方法, 计算账户余额.原有系统计算程序过程如下:
*
* for(...){ //调用phoneCard的caculate()方法,并打印信息 }
*
* 信息: 神舟行: 接.拨0.60/分 大灵通: 16元包接听,拨0.25/分 全球通: 26元座机费, 0.40/分(拨,接)
*/
public abstract class PhoneCard {
private double initMoney;
private double haveMoney;
private static String cardTypeName;
private double receiveCallTime;//接听电话时间 单位:分钟
private double sendCallTime;//拨打电话时间 单位:分钟
private static double sendPrice; //拨打电话单价 分钟为单位 * 元/分
private static double receivePrice;// 接听电话单价 分钟为单位 * 元/分
private static double monthCast;//月基本费,即月租
public PhoneCard() {
}

public PhoneCard(double initMoney) {
this.setInitMoney(initMoney);
}

public double getHaveMoney() {
return haveMoney;
}

public void setHaveMoney(double haveMoney) {
this.haveMoney = haveMoney;
}

public double getInitMoney() {
return initMoney;
}

public void setInitMoney(double initMoney) {
if (initMoney >= 0)
this.initMoney = initMoney;
else
System.out.println("InitMOney Err!"); // 相关处理
}

public static double getReceivePrice() {
return receivePrice;
}

public static void setReceivePrice(double receivePrice) {
PhoneCard.receivePrice = receivePrice;
}

public static double getSendPrice() {
return sendPrice;
}

public static void setSendPrice(double sendPrice) {
PhoneCard.sendPrice = sendPrice;
}

public double getReceiveCallTime() {
return receiveCallTime;
}

public void setReceiveCallTime(double receiveCallTime) {
this.receiveCallTime = receiveCallTime;
}

public double getSendCallTime() {
return sendCallTime;
}

public void setSendCallTime(double sendCallTime) {
this.sendCallTime = sendCallTime;
}

public abstract void caculate();

public static double getMonthCast() {
return monthCast;
}

public static void setMonthCast(double monthCast) {
PhoneCard.monthCast = monthCast;
}
public static String getCardTypeName() {
return cardTypeName;
}
protected static void setCardTypeName(String cardType){
cardTypeName=cardType;
}
}
class ShenZhouXing extends PhoneCard{

static{
setCardTypeName("神州行");
setMonthCast(0);
setSendPrice(0.6);
setReceivePrice(0.6);
}
public ShenZhouXing(){
}
public ShenZhouXing(double initMoney){
super(initMoney);
}
public void caculate(){
double cast=
ShenZhouXing.getMonthCast()
+this.getSendCallTime()*this.getSendCallTime()
+this.getSendCallTime()*super.getSendPrice();
this.setHaveMoney(getInitMoney()-cast);
System.out.println("消费金额:"+cast+" 余额:"+this.getHaveMoney());
}

}
class DaLingTong extends PhoneCard{
static{
setCardTypeName("大灵通");
setMonthCast(16);
setSendPrice(0.6);
setReceivePrice(0);
}
public DaLingTong(){
}
public DaLingTong(double initMoney){
super(initMoney);
}
public void caculate(){
double cast=
DaLingTong.getMonthCast()
+this.getSendCallTime()*this.getSendCallTime()
+this.getSendCallTime()*super.getSendPrice();
this.setHaveMoney(getInitMoney()-cast);
System.out.println("消费金额:"+cast+" 余额:"+this.getHaveMoney());
}
}
class QuanQiuTong extends PhoneCard{
static{
setCardTypeName("大灵通");
setMonthCast(16);
setSendPrice(0.6);
setReceivePrice(0);
}
public QuanQiuTong(){
}
public QuanQiuTong(double initMoney){
super(initMoney);
}
public void caculate(){
double cast=
QuanQiuTong.getMonthCast()
+this.getSendCallTime()*this.getSendCallTime()
+this.getSendCallTime()*super.getSendPrice();
this.setHaveMoney(getInitMoney()-cast);
System.out.println("消费金额:"+cast+" 余额:"+this.getHaveMoney());
}
}

ssqtjffcu 2008-09-29
  • 打赏
  • 举报
回复
可以考虑一下策略模式啊...感觉设计模式挺有用的
wang511123 2008-09-29
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 xianrenxw 的回复:]
晕, 你们都只回答我的第二个问题.


那个 利用继承机制完成, 模拟移动的计费程序. 怎么没人贴出代码给我看看啊...

谢谢!!!!!
[/Quote]
晕死,我不是给你写了一个模版吗?
yaoliyaoli1111 2008-09-28
  • 打赏
  • 举报
回复
1,子类如何调用父类的private成员变量
你可以设置一个get方法,把private的成员变量ruturn出来

2. 父类能否调用子类的 方法和变量, 听人说好像只能调用子类覆盖了父类的方法 .
假如father是父类,son是子类,
你可以这样写
father a = new son();
但是似乎是不可以调用子类的方法,,,
fangsp 2008-09-28
  • 打赏
  • 举报
回复
帮顶一个
期待着高手的到来
左师佑图 2008-09-28
  • 打赏
  • 举报
回复
子类如何调用父类的private成员变量:
在父类中添加get方法,设置为public,返回private成员变量的值,然后在子类中调用这个get方法
liang__ 2008-09-28
  • 打赏
  • 举报
回复
楼上讲的都很不借
funcreal 2008-09-28
  • 打赏
  • 举报
回复
子类如何调用父类的private成员变量

如果父类的变量或者方法是专门设计给子类调用的,那么可以使用protected来定义。或者写一个get方法,有了这个,外界就都能访问这个值了。但是如果这个变量不想让外界访问的话,就只能用protected了。



父类能否调用子类的 方法和变量, 听人说好像只能调用子类覆盖了父类的方法 .

父类永远不可能调用子类的东西。如果你指的是父类的指针指向了子类的对象的话,只要进行强制类型转换就可以了。
Father a = new Son();
Son b = (Son)a;
这时候b就可以调用Son的方法了。
wang511123 2008-09-28
  • 打赏
  • 举报
回复
abstract class phoneCard
{
caculate();
}

class dalingtong extends phoneCard
{
caculate();
}

class quanqiutong extends phoneCard
{
caculate();
}

class test
{
phoneCard xx;
xx.caculate();//当xx指向哪个子类就调用哪个子类的方法
}

另:出于安全性的考虑,变量都是设置为private方法,如果要更改的话采用的都是public 的get和set方法

62,628

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧