在Java中,何时能将父类对象转换成子类对象?
为什么有的时候可以,而有的时候不能呢?
Aæ¯ç¶ç±»ï¼Bä»A继æ¿ï¼
æå类对象å½åç¶ç±»å¯¹è±¡æ¥ä½¿ç¨ï¼ç¶ç±»å¼ç¨æåå类对象就æ¯åä¸è½¬åï¼upcastingï¼ï¼
A a = new B();没æé®é¢,åä¸è½¬åæ¯å®å ¨çï¼å 为åºç±»ä¸ä¼å ·æ大äºå¯¼åºç±»çæ¥å£ã
æç¶ç±»å¯¹è±¡å½åå类对象æ¥ä½¿ç¨ï¼å°±æ¯åä¸è½¬åï¼downcastingï¼ï¼
ï¼å¨Javaä¸ï¼ä½æ¶è½å°ç¶ç±»å¯¹è±¡è½¬æ¢æå类对象ï¼
为ä»ä¹æçæ¶åå¯ä»¥ï¼èæçæ¶åä¸è½å¢ï¼ ï¼
B b = (B)new A();è¿æ¯ä¸å®ä¼æ¥éçï¼
åªæä¸ç§æ åµ åä¸è½¬å æ¯å®å ¨çï¼é£å°±æ¯åç»è¿åä¸è½¬åï¼
A a = new B();
B b = (B)a;
å 为æ们å¯ä»¥è¯´ï¼çæ¯ä¸åªå¨ç©ï¼é£ä¹äººå®¶è¦æ±ä¸åªå¨ç©ï¼ææçä»éï¼upcastingï¼ï¼è¯å®æ²¡é®é¢ï¼
ä½æ¯æ们æ æ³æç¡®ç¥éï¼ä¸åªå¨ç©å®è¯å®å°±æ¯ä¸åªçï¼å®ä¹å¯è½æ¯ä¸åªç«ï¼æ以downcastingæ¯ä¸å®å ¨çï¼
é£ä¹
æåç»è¿upcastingï¼æä¸åªç转æ¢æäºä¸åªå¨ç©ï¼ç¶ådowncastingï¼åæå®è½¬åçï¼è¯å®å¯ä»¥ï¼
å 为ææç¡®çç¥éå®æ¬èº«å°±æ¯ä¸åªçï¼å¼ºå¶è½¬æ¢å¾è½è½¬æè¡ã
æå类对象å½åç¶ç±»å¯¹è±¡æ¥ä½¿ç¨ï¼ç¶ç±»å¼ç¨æåå类对象就æ¯åä¸è½¬åï¼upcastingï¼ï¼
A a = new B();没æé®é¢,åä¸è½¬åæ¯å®å ¨çï¼å 为åºç±»ä¸ä¼å ·æ大äºå¯¼åºç±»çæ¥å£ã
æç¶ç±»å¯¹è±¡å½åå类对象æ¥ä½¿ç¨ï¼å°±æ¯åä¸è½¬åï¼downcastingï¼ï¼
ï¼å¨Javaä¸ï¼ä½æ¶è½å°ç¶ç±»å¯¹è±¡è½¬æ¢æå类对象ï¼
为ä»ä¹æçæ¶åå¯ä»¥ï¼èæçæ¶åä¸è½å¢ï¼ ï¼
B b = (B)new A();è¿æ¯ä¸å®ä¼æ¥éçï¼
åªæä¸ç§æ åµ åä¸è½¬å æ¯å®å ¨çï¼é£å°±æ¯åç»è¿åä¸è½¬åï¼
A a = new B();
B b = (B)a;
å 为æ们å¯ä»¥è¯´ï¼çæ¯ä¸åªå¨ç©ï¼é£ä¹äººå®¶è¦æ±ä¸åªå¨ç©ï¼ææçä»éï¼upcastingï¼ï¼è¯å®æ²¡é®é¢ï¼
ä½æ¯æ们æ æ³æç¡®ç¥éï¼ä¸åªå¨ç©å®è¯å®å°±æ¯ä¸åªçï¼å®ä¹å¯è½æ¯ä¸åªç«ï¼æ以downcastingæ¯ä¸å®å ¨çï¼
é£ä¹
æåç»è¿upcastingï¼æä¸åªç转æ¢æäºä¸åªå¨ç©ï¼ç¶ådowncastingï¼åæå®è½¬åçï¼è¯å®å¯ä»¥ï¼
å 为ææç¡®çç¥éå®æ¬èº«å°±æ¯ä¸åªçï¼å¼ºå¶è½¬æ¢å¾è½è½¬æè¡ã
温馨提示:答案为网友推荐,仅供参考
第1个回答 2013-11-20
JAVA遵循里氏代换原则,子类一定可以代替父类,不必强制类型转换,父类只能调用子类重写的方法,子类特有的方法,不可以调用
第2个回答 2013-11-20
多态的表现..父类类型的变量可以指向子类对象,但子类类型的变量不能指向父类对象
比如有动物,马,猪,马和猪继承了动物,我们可以
动物 animal = new 动物();
animal = new 猪();
但不可以
猪 pig = new 猪();
pig = new 动物();
比如有动物,马,猪,马和猪继承了动物,我们可以
动物 animal = new 动物();
animal = new 猪();
但不可以
猪 pig = new 猪();
pig = new 动物();
第3个回答 2013-11-20
事先说好的能赚
不说好 不行
不说好 不行