子类父类属于同一个类么
本帖最后由 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的对象,这样更加通用。