作者swpoker (swpoker)
看板java
标题Re: [问题] 多形问题
时间Mon Oct 29 12:23:07 2012
其实你要了解你设计的物件的意义是什麽
然後选择方法
在此举例一下
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