求教java 父类和子类 之间的问题。

我首先定义了一对象数组Customer[]list=newCustomer[10];Customer是父类,而CheckingAccountCustomer的子类。Che... 我首先定义了一 对象 数组 Customer[] list = new Customer[10];
Customer 是父类, 而 CheckingAccount Customer 的子类。
CheckingAccount 有 deposit() 方法 。

现在我定义了 Customer c = new CheckingAccount();然后将这个对象c 赋给 对象数组中的一单元,比如 list[0] ;
list[0] = c ;

为什么我无法如下操作

list[0].deposit();

有错误提示说 找不到 deposit() 这个方法。

求解啊求解啊。
展开
 我来答
百度网友0f25dc3
2011-02-27 · 超过12用户采纳过TA的回答
知道答主
回答量:49
采纳率:0%
帮助的人:35.5万
展开全部
Customer c = new CheckingAccount(); 这里实际上定义的是一个子类的对象并且通过向上转型为父类对象,随后你又将c赋给了父类对象,很显然子类继承了父类,所以子类的范围比父类要广,通过向上转型就缩小了这个范围,关于子类扩展父类的一切就被隔离了,此时c只能访问父类的字段和方法以及被子类覆盖的方法。比如如果父类也有一个 deposit() 方法,而且子类的 deposit() 方法在权限上能覆盖父类的 deposit() ,此时通过c. deposit() 就能访问到子类的 deposit() ,而不是父类的 deposit() 。
当然,你如果此时将c转换成子类的对象也是可以的,因为c本来就指向子类的对象{c仅仅只是一个对象的引用,就像c语言的指针一样,当然这不是十分准确的说法},而如果c不是通过向上转型得到的,而仅仅是通过new创建的一个父类对象,就不能把c向下转型为子类的对象。
追问
那如果我有多个子类。。。。并且 每个子类都有  deposit()  这个方法  。。。。那么你说的这种方法还可以吗??

还有点疑问:

那我能不能 CheckingAccount c = new CheckingAccount();
然后把 list[0] = c ; 可以这么赋给 Customer 类型的 list[0] 吗?
wangfeimeinv
2011-02-27 · TA获得超过141个赞
知道小有建树答主
回答量:215
采纳率:100%
帮助的人:153万
展开全部
你是向上转型,所以父类无法得到子类的方法。
提示:
试想,如果你有两个或多个子类,那么Customer如何知道调用那个方法呢?
并且你应该再去看一下关于类的继承问题,子类继承父类的公共方法并能使用,而父类不能继承子类的方法,不能使用、调用子类的方法。
追问
那我能不能      CheckingAccount    c  = new CheckingAccount();
然后把 list[0] = c ; 可以这么赋给 Customer 类型的 list[0] 吗?

这样之后为什么还是无法调用deposit() 方法 ?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ken_cqyou
2011-02-27 · TA获得超过1641个赞
知道小有建树答主
回答量:480
采纳率:0%
帮助的人:337万
展开全部
这明显是不行的 这是一个父类引用指向子类对象的示例
你可以去输出这个实例的类型信息看看咯
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
sujunj2005
2011-02-27
知道答主
回答量:45
采纳率:0%
帮助的人:0
展开全部
子类可以在任意时候当做父类来使用,但是父类不能在任意时间当做子类来使用。
Customer c = new CheckingAccount();是新建一个子类对象声明为父类类型,父类里面是没有deposit()方法的,自然找不到
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式