日期:2014-05-20  浏览次数:20681 次

子类父类属于同一个类么
本帖最后由 longer5153458 于 2013-08-26 12:19:39 编辑
package next9;
class Father{

}

class Son1 extends Father{

}

class Son2 extends Father{

}
public class TestSonAndFather {

public static void main(String[] args) {
boolean flag= false;
Son1 son1= new Son1();
Son2 son2= new Son2();
Father father= new Father();
if(son1.getClass()==father.getClass()){//这里却不会报错,难道只有子类跟父类才可以使用getclass()来比较么吗?
flag= true;
}
System.out.println(flag);//这里的flag=flase,难道子类不属于父类么?
/*if(son2.getClass()==son1.getClass()){//这就为啥会报错
flag = true;
}
*/
}
}

------解决方案--------------------
     boolean flag= false;        
     Son1 son1= new Son1();         
     Son2 son2= new Son2();         
     Father father= new Father();         
    if(son1.getClass()==father.getClass()){//这里却不会报错,难道只有子类跟父类才可以使用  getclass()来比较么吗?             flag= true;         
}          
System.out.println(flag);//这里的flag=flase,难道子类不属于父类么?        
 /*if(son2.getClass()==son1.getClass()){//这就为啥会报错             flag = true;         }         
*/
=================================================
我的理解是这样的:
    1)子类是子类,同时也是父类,它可以调用子类的方法,为了通用常将其类型用父类表示,更通用的做法是上升到接口。
    2)if中是比较不会有错的,Son1.getClass就是Son1.class,而Father.getClass就是Father.class,由于两个名称不同因此是不相同的,但并不意味着子类不是父类,它仍是从父类下继承过来的就象猫是猫,同时也是动物一样。
   3)经常可以看到这样写:Father son1=new Son1();此时访问的是Son1类中的方法,但它仍可上溯成Father的对象,这样更加通用。