区分
- 向上转换:子类到父类转换;失去子类特有的方法,向上变成父类
- 向下转换:父类到子类转换;拥有子类特有的方法,向下变成子类
举例多好用:向上转型-多态
class Pet{
public void eat(){}
}
class Dog extends Pet{
@Override
public void eat() {
System.out.println("狗狗吃骨头");
}
}
class Cat extends Pet{
@Override
public void eat() {
System.out.println("喵喵吃鱼干");
}
}
/**
* 主人,写个喂不同宠物的方法,这里用多态/向上转型有多方便
*/
class Master{
public void feed(Pet p){
p.eat();
}
}
public class Demo0609 {
public static void main(String[] args) {
Pet d = new Dog();
Pet c = new Cat();
Master m = new Master();
m.feed(d);
m.feed(c);
}
}
举例多好用:向下转型-强制类型转换
package www.csdn.p0209;
import org.w3c.dom.Element;
import java.util.ArrayList;
import java.util.List;
/**
* 新建接口Electronics
*/
interface Electronics{
}
/**
* 新建电脑类Thinkpad,实现Electronics接口
*/
class Thinkpad implements Electronics{
public void boot(){
System.out.println("using Thinkpad");
}
}
/**
* 新建鼠标类Mouse,实现Electronics接口
*/
class Mouse implements Electronics{
public void move(){
System.out.println("move the mouse");
}
}
/**
* 新建键盘类Keyboard类,实现Electronics接口
*/
class Keyboard implements Electronics {
public void input(){
System.out.println("using Keyboard input");
}
}
/**
* 新建购物车类ShopCart
*/
class ShopCart{
/** mlist集合,存放电子产品
* List<Electronics>用了范型知识
*/
private List<Electronics> mlist = new ArrayList<Electronics>();
/** add方法,添加电子产品到购物车
* add将子类实例传进来存放,涉及向上转型,丢掉了子类特有的方法,
* 例如Thinkpad丢掉了boot(),Mouse丢掉了move(),Keyboard丢掉了input()
*/
public void add(Electronics electronics){
mlist.add(electronics);
}
/** getSize方法,获取电子产品数量*/
public int getSize(){
return mlist.size();
}
/** getListItem方法,获取相应电子产品*/
public Electronics getListItem(int position){
return mlist.get(position);
}
}
public class Demo0209 {
public static void main(String[] args) {
final int THINKPAD =0;
final int MOUSE =1;
final int KEYBOARD =2;
ShopCart car = new ShopCart();
car.add(new Thinkpad());
car.add(new Mouse());
car.add(new Keyboard());
System.out.println("购物车里电子产品数:"+car.getSize());
//取出来电脑,测试
//向下转型,让类实例重新获得了丢失的方法
Thinkpad thinkpad = (Thinkpad) car.getListItem(THINKPAD);
thinkpad.boot();
System.out.println("------------");
//取出来鼠标,测试,略
//取出来键盘,测试,略
}
}
以上例子来自Java向下转型的意义
注意:“需要把多种类型的实例对象,全都扔到一个集合”