Re: [問題] 多形問題
其實你要了解你設計的物件的意義是什麼
然後選擇方法
在此舉例一下
1.狀況: 有個類別為:Person(name,id),想要其子類別都要能夠使用,
然後每個類別產出樣式都不太一樣
同時程式只有我在寫
那麼我會這樣寫
public abstract class Person {
protected String name;
protected int id;
protected Person(String name,int id){
this.name=name;
this.id=id;
}
public abstract void printPerson();
}
class Student extends Person{
int g1;
int g2;
int g3;
public Student(String name,int id,int g1, int g2,int g3){
super(name,id);
this.g1=g1;
this.g2=g2;
this.g3=g3;
}
public void printPerson(){
System.out.println("name="+name);
System.out.println("id="+id);
System.out.println("g1="+g1);
System.out.println("g2="+g2);
System.out.println("g3="+g3);
}
}
這樣的寫法是很直覺也是很簡單的
只是這樣的寫法幾乎就是破壞物件的封裝原則
同時也沒有明確的定義printPerson的意義
任意的將屬性開放出來
任意的胡亂實做
但是卻是相當的簡單及俐落
可以很直覺的寫出程式,快速的完成初步的架構
而這就是我自己的作法
通常在早期比較小的規模的情況下~比較沒什麼問題
只是在中後期或是開始比較有規模的話~這樣的寫法就會帶來很多問題
這個時候我就會採用"重構"+"設計樣式"的方法論~在去解決就可以了
基本上我比較喜歡一開始採用簡單雖然具有違反OO的原則的方法
之後再隨者程式碼的演變~再去重構我的程式碼就是了
也就是
心中有OO
但是沒OO
XD
提供給你參考一下
※ 引述《TWTRubiks (阿哲)》之銘言:
: 目的,我想要把name和id宣告成private然後印出來(宣告成public就很簡單)
: 不過我想要宣告成private印出來(試了很多方法),都無法解決,想請問有甚麼比較好的解
: 決方法
: 我試過了用類似Getid(),不過還是不行因為還要Setid(),這樣會讓Person變得很雜
: 目前知道的解決方法,使用protected可以解決!
: 但是想請問還有其他方法嗎?!
: package aaa;
: abstract class Person{
: private String name;
: private int id;
: abstract void printPerson();
: }
: class Student extends Person{
: private double g1,g2,g3;
: public Student(String name,int id,double g1,double g2,double g3){
:
: //這裡我就不知道該怎麼打了,因為我式宣告成private,也以也不能打 ex. thid.id = id
: this.g1=g1; this.g2=g2; this.g3=g3;
: }
: public void printPerson(){
: double average,sum;
: sum=g1+g2+g3;
: average=sum/3;
: // 當然這裡也悲劇
: // System.out.println("姓名:"+name);
: // System.out.println("編號:"+getID());
: System.out.println("總分:"+sum);
: System.out.println("平均:"+average);
: }
: }
: public class AAA {
: /**
: * @param args
: */
: public static void main(String[] args) {
: // TODO Auto-generated method stub
: Student S=new Student("TWTRubiks",1100104105,96,99,60);
: S.printPerson();
: }
: }
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 163.29.28.131
討論串 (同標題文章)