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燈, 水草

請輸入看板名稱,例如:iOS站內搜尋

TOP