呵呵,我没有那么聪明,也不是想象力丰富,其实我我很不善于抽象思维,非要想点什么出来才行的。说到那个瞎子类,如果不算人的子类,那么应该算是什么呢?它和人类(称做人的那个类)之间是什么关系呢?我本来是这么想的:
class 人{
public image look(){
return 看到的图像;
}
}
class 超人 extends 人 {
public image look(){
return 看到的图像;
}
}
class 瞎子 extends 人 {
public image look(){
return 漆黑一片;
(return null;)
}
}这样的话,把瞎子作为人的子类行吗?
class 人{
public image look(){
return 看到的图像;
}
}
class 超人 extends 人 {
public image look(){
return 看到的图像;
}
}
class 瞎子 extends 人 {
public image look(){
return 漆黑一片;
(return null;)
}
}这样的话,把瞎子作为人的子类行吗?
子类不应该总是改写父类的方法,而是扩展.class 人{
public image look(){
return 看到的图像;
}
}class 超人 extends 人 {
public void fly(){
System.out.println("I can fly!");
}
}这样,超人不仅能look,还可以fly。超人是人的子类。你可以把超人当作人,因为你调用他的look方法,他会做出正确的动作。人 oneman = new 超人();
oneman.look();这个时候,尽管你得到的是超人的实例,但是你仅仅关心他是个人,这种调用就是上溯造型
1、既然有些人是不能“看”的,那么“看”就不应该是基础类的方法,而是子类的方法,只用说有的“人”共有的方法和属性才可以在基础类"人"中
interface 人
{
String 名字;
...
其它一些任何一个“人”都具有的属性
public 心脏跳动();
其它一些任何一个“人”都具有的方法}class 正常人 impl 人
{
//正常人的属性;
眼睛;
嘴;
//正常人的方法
public 图像 看()
{
return 眼睛.看();
};
public 声音 听()
{
return 耳朵.听();
}; }class 瞎子 impl 人
{
//瞎子的属性;
眼睛;//瞎子还是有眼睛的,只是不能看而已。
耳朵;
//瞎子的方法 是没有听的方法的
public 声音 听()
{
return 耳朵.听();
};
}2、认为瞎子也是可以看的,看的只是NULL或者是SeeException;
interface 人
{
眼睛;
耳朵;
public 图像 看();
public 声音 听();}class 瞎子 impl 人
{
眼睛;
耳朵;
public 图像 看()
{
return NULL;
//或者 throws SeeExcption;
}
public 声音 听();
}3.只用“人”interface 和 “人”的实现
interface 人
{
眼睛;
耳朵;
..
看();
听();}class 人impl impl 人
{眼睛 a;
耳朵 b;
//构造函数
public 人impl(眼睛 a,耳朵 b, 嘴 c...) {
this.a=a;
this.b=b;
}
public 图像 看()
{
if(a==瞎子的眼睛)
return NULL;
...
};}