java 板


LINE

※ 引述《TWTRubiks (阿哲)》之铭言: : 看到书上想练习一下, : 题目是: : 请建立Java程式宣告Person类别,拥有name姓名和id编号,新增printPerson()成员方法 : 可以显示个人资料,然後宣告Student类别继承自Person类别,拥有3次考试成绩,请覆写 : printPerson()方法来计算总分和平均。 虽然这书出的题目怪怪的 但大概是想要你练习继承和override(你理解的那个覆写) : 这里我就有一个问题了~! 到底是要印出总分和平均就好,还是也要印出姓名和编号 : (因为我想说继承了) 要不要你应该可以自己决定 : : 不过我网路上查了一下~! 大家还是都把 姓名和编号 印出来了,所以我也印出来 : 以下我的程式码: 以下大部分是一些惯例或建议 : package Test; 通常 package name 会用全小写 : class Person{ : private String name; //宣告姓名和编号 : public int id; 除非你取的变数名称很诡异,不然这一行注解是可以不用 然後让id public是危险的,通常id有识别的用途 让外部类别可以任意修改你不觉得抖抖的吗 : public Person(String N,int I){ //建构子 : name=N; id=I; 通常参数也会用小写开头 : } : public String getName(){ //因为我把name宣告成private : //,所以需要用 getName() : return name; : } : public void printPerson(){ : System.out.println("姓名:"+getName()); 内部可以直接取得name时,可以直接写name就好 有人说是效率问题 但,也有人说用方法取得可以增加维护性 不过现在IDE要一次修改全部的成员名称参照已经很方便了 : System.out.println("编号:"+id); 虽然题目要求printPerson方法 但一般来说在这里印出来就像上一篇讲的 会降低弹性和重用性等等 那本书要是一直这样写范例给你看的话 可以考虑换一本XD : } : } : //以下子类别 : class Student extends Person{ : public int g1,g2,g3; //宣告3个成绩 可以思考一下 若之後当你要再增加另外两个成绩时 目前的设计是不是有些困扰 还有为何是public? : public Student(String N,int I,int g1,int g2,int g3){ : super(N,I); 类别生成instance的过程中 也必须初使化父类别 因此这里你呼叫了super的建构子 这也是为什麽你必须在new Student的时候带入name和id 它们不是多余的 但也不是"一定要"的 例如你可以 super("ker ker", 5566); 去写死它 端看你的设计情境而定 不过通常子类别会和父类别有相似(同)的建构子参数 另外可以思考一下在建构子必须初始化分数 是否也降低了类别的弹性 也就是我上面提到的,当要另外增加两个分数时有些困扰 : this.g1=g1; this.g2=g2; this.g3=g3; : } : public int getG1(){ : return g1; : } : public int getG2(){ : return g2; : } : public int getG3(){ : return g3; : } : public void printPerson(){ //在这里我覆写了 : int a,sum; : a=getG1()+getG2()+getG3(); : sum=a/3; : System.out.println("总分:"+a); : System.out.println("平均:"+sum); : } : } : public class test { : /** : * @param args : */ : public static void main(String[] args) { : // TODO Auto-generated method stub : Person P1=new Person("TWTRubiks",1100104105); : Student S2=new Student("TWTRubiks",1100104105,100,100,60); : // 上面好像一定要数入 "TWTRubiks",1100104105 ,因为继承了,所以如 : // 果不输入会错误 : P1.printPerson(); : S2.printPerson(); : } : } : 结果印出 : 姓名:TWTRubiks : 编号:1100104105 : 总分:260 : 平均:86 : 我想问,如果以这题目来讲,我这样做算对吗?! : 因为我一直觉得我的Student S2=new Student("TWTRubiks",1100104105,100,100,60); : 的"TWTRubiks",1100104105,是多写的,不过不写又不行 : 请各位大大帮我看看 : 非功课,自己练习遇上的小问题 建议可以把override的部份再看一次 就知道为何只会出现分数,而没有个人资料 更多其他的物件设计建议 请参考上一篇板友回文 --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 1.165.195.39
1F:推 TWTRubiks:哇~! 感谢大大~! 这本书是因为现在大二老师上课用的 10/20 22:09
2F:→ TWTRubiks:另外,要怎麽样决定要用public还是private 10/20 22:11
3F:推 TWTRubiks:我知道2个的差别~! 不过因为题目上没规定(通常会写) 10/20 22:13
这部份建议可以回头看看封装(Encapsulation)的概念 虽然我觉得你应该烦恼的是.. 什麽时候该用 protected 什麽时候该用 friend (不写修饰词时的预设值) 一般来说类别的成员都会是 private 要提供给其他类别存取都透过getter、setter 甚至更谨慎的getter在回传物件时,会复制一份回传 而不直接回传自己持有的物件参照 这里也是端看你的设计 有些情况成员适合用 public 例如作为资料载具的类别时,可以少写一点程式码 Android 就有这样的 Message 类别 http://developer.android.com/reference/android/os/Message.html 例如供其他类别辨识用的状态码 class GameState { public static final STATE_IDLE = 0x0; public static final STATE_RUNNING = 0x1; private int currentState; // 略 public int getState() { return currentState; } } class Game { private GameState state; // 略 public void doSomething() { if(state.getState() == GameState.STATE_RUNNING) { // do some process } } } 我目前只想到这两个例子 或许还有其他情况 it depends on your design
4F:推 TWTRubiks:所以我才自己乱设定,小弟刚学不到1个月,请多多包涵 10/20 22:17
5F:→ cha122977:借问,我习惯用this.name而不用name,performance有差吗 10/21 00:09
6F:推 TWTRubiks:this.name=name,是只这样吗?! 应该没差吧 10/21 00:14
我用1,000,000,000次的回圈各跑了两种case几次 (WinXP, JRE6) counter += 1 和 this.counter += 1; 时间上毫无差别 ※ 编辑: No 来自: 1.165.195.39 (10/21 02:24)
7F:→ cha122977:感谢,看来compiler後的结果是一样的@@ 10/21 16:05
8F:→ TWTRubiks:原来可以用super把他写死哦~!! 至於说到扩充成绩 10/21 17:08
9F:→ TWTRubiks:应该就要用 多形 的观念了吧!!? 10/21 17:10
10F:推 TWTRubiks:我们是用这本书 http://goo.gl/NRmtr <<使用这本书 10/21 18:08







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:BabyMother站内搜寻

TOP