------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
今天又看到内部类,有点迷糊,专门写一篇博客来理清一下思路
我的假设是,医生,病人,医生给病人的心脏做手术
class person
{
private String name;
private String career;
public String getName() {
return name;
}
public String getCareer() {
return career;
}
public person(String name, String career) {
super();
this.name = name;
this.career = career;
}
}
class doctor extends person{
private person p;
public doctor(String name, String career) {
super(name, career);
}
public void doOperation(patient c)
{
//打印出心脏
System.out.println(c.getheart());
//将心脏的状态设置为健康
c.getheart().setState("Heathy");
System.out.println(c.getheart());
}
}
关于病人定义,我有几条思路
思路一
病人提供一个返回他自己心脏的方法,当医生要给病人做手术时,他获得病人的引用,调用该方法来获取心脏,进而对其进行进一步的操作,这里的方法很简单,就是将他的状态设置为“Healthy”
class heart{
private String color;
private String state;
public heart(String c,String s)
{
this.color=c;
this.state=s;
}
public String getColor() {
return color;
}
public String getState() {
return state;
}
public void setColor(String color) {
this.color = color;
}
public void setState(String s)
{
this.state=s;
}
public void beat()
{
System.out.println("I am beating!");
}
@Override
public String toString()
{
return this.color+":"+this.state;
}
}
心脏类定义在病人中,为其内部类,病人有一个方法
getHeart()
{
return new haert("Red","Not healthy");
}
这里我犯了一个错误,在doctor的doOperation中,需要多次调用这个方法,但是每次返回的却是不同的心脏,因为没有心脏的引用,所以导致我每次调用心脏的setState方法时,并不在我当初调用的那个心脏上,这是一个错误。
改正一
后来我想到了张孝祥老师的单例模式,即心脏他自己创建一个唯一的静态实例,并提供一个静态方法给病人,那么每次调用的就是同一个心脏了,但是这一方法令事情非常复杂,且该方法不适合用于内部类的结构,若是单独的建一个心脏类,是没有任何问题的。
改正二
当我结合实际来思考时,突然豁然开朗,一个人被创建的时候就应该有一个心脏,我们完全可以在构造方法中做这件事情,那么病人也可以对外提供一个获取自己心脏的方法,当时每次返回的绝对是同一个心脏
代码如下
class patient extends person{
private heart h;
public patient(String name, String career) {
super(name, career);
h=new heart("Red","Not Healthy");
}
public heart getheart()
{
return h;
}
这样用起来不仅简单,而且容易举一反三,利用这样一种面向对象的思维,多多磨练就很容易找到解决一个实际问题的方法,这是最重要的。