作者yoll522 (幽灵)
看板java
标题Re: [问题] 以父类别宣告然後以子类别的建构子new
时间Sat Jul 19 00:42:33 2014
※ 引述《qrtt1 (愚人)》之铭言:
: ※ 引述《jb0802 (james)》之铭言:
: : 还有一点问题~~所以再发另一篇文~~
: : 这样与使用 自来也 n = new 自来也(); 所做出来的物件n应该和
: : 忍者 n = new 自来也(); 这两个应该是一样的n吧
: : 会有什麽不一样的地方吗?
: : 另外,如果两者一样,我个人的习惯是 当然是把他宣告成 自来也 n=new 自来也();
: : 因为这样不是让自己比较清楚它是自来也吗?
: : 有些自来也有且忍者没有的方法,我也会记得它可以被拿来叫用。
: : 另外一个问题,会使用这样的原因是因为父类别有abstract的方法
: : 在子类别给实作了才会有这样的宣告吗?
: 是一样啊, 不过不够抽象化
: 当任务来的时候需要任务编组
: Team {
: 医疗忍者 m;
: 忍者 n;
: 队长 o;
: 自来也 p;
: }
: 医疗忍者需 实作 interface "治疗" { 施展治疗忍术(); }
: =======================================================
: 每次你要组个 Team 自来也都要到, 他怎麽有时间写小说呢 XD
: 而且这样的设计是不是表示, 没有自来也 Team 就不完整了呢?
: Team {
: 医疗忍者 m = new 小樱();
: 忍者 n = new 鸣人();
: 队长 o = new 卡卡西();
: }
: Team {
: 医疗忍者 m = new 小樱();
: 忍者 n = new 鸣人();
: 队长 o = new 自来也();
: }
: Team {
: 医疗忍者 m = new 纲手();
: 忍者 n = new 自来也();
: 队长 o = new 飞猿();
: }
: 只要型别对了, 自来也可以出现在任何位置, Team 的安排也能很自由
: 不会因为少了自来也而不能组 Team
不好意思,推了一个2008年的古文@@
这两天在学java也遇到了同样的问题,虽然全部回文都看完了,却还是有点疑问存在
我想请问说,既然我写程式的人都知道说我就是要用自来也,
那为什麽我就不要直接写 自来也 n = new 自来也(); 呢?
看了上述的任务边组的例子後还是有点不懂,
如果说现在要组一个team
Team {
医疗忍者 m = new 纲手();
忍者 n = new 自来也();
队长 o = new 飞猿();
}
就好像说,我都知道钢手要当医疗忍者了,也知道飞猿要当队长
那为什麽写程式时不就乾脆写成
Team {
钢手 m = new 纲手();
自来也 n = new 自来也();
飞猿 o = new 飞猿();
}
这样呢?
如果忍者这父类别有一个abstract的招换术需要子类去定义他
那继承忍者的所有类别,都一定会去定义招换术不是吗?
那既然继承的子类都定义了,那麽所有的方法也都可以安心使用不是吗@@?
就像前面的文章所说的
忍者 n = new 自来也();
忍者 m = new 纲手();
n.招唤术(); // 文太出现了
m.招唤术(); // 蜗蝓出现了
因为自来也、钢手都是继承忍者的,所以他们肯定会定义招换术,那麽程式写成
自来也 n = new 自来也();
钢手 m = new 纲手();
n.招唤术(); // 文太出现了
m.招唤术(); // 蜗蝓出现了
这样也没错不是吗@@?
拜托各位帮忙解除小弟的疑问,谢谢大家
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 49.159.8.95
※ 文章网址: http://webptt.com/cn.aspx?n=bbs/java/M.1405701757.A.583.html
1F:推 LPH66:当你要把自来也给别人用时就不一定了 07/19 00:44
2F:→ LPH66:别人只知道他拿到一个忍者, 但是叫他用招唤术还是会出现文太 07/19 00:44
请问这个别人,是说另外一个写程式的人吗?
可是如果说别人要用到别的忍者时,他如果想用钢手,那麽他不就可以改成
钢手 n = new 钢手();
这样吗@@?
※ 编辑: yoll522 (49.159.8.95), 07/19/2014 01:03:33
突然间想到,还是说其实这跟写程式的一方无关,而是跟执行时有关?
就假设说这是一个游戏,刚开始要让使用者选角
忍者 role;
int index = 取得使用者选的角色;
switch(index){
case 1: role = new 自来也(); break;
case 2: role = new 钢手(); break;
}
会是这样吗@@?
还是我一样理解错误ˇ_ˇ
※ 编辑: yoll522 (49.159.8.95), 07/19/2014 01:06:06
3F:推 putumaxally:应该是对了 07/19 01:34
4F:→ jtorngl:List<忍者> ninjas = getNinja(String[] nids); 07/19 17:43
5F:→ jtorngl:你应该不会想用instanceof去检查instance的实际型别 07/19 17:45
6F:推 luoqr:照你的宣告法 如果你要同时操作很多Team 那肯定写的很丑 07/19 18:51
7F:→ luoqr:或是Team里有个大绝招需要三个角色合体完成的话 就会不好写 07/19 18:53
8F:→ yoll522:我明白了,谢谢各位的解说 07/20 19:13