java之 向上转型与向下转型

向上转型


class father {
	public void eat(){
		System.out.println("father eat()");
	}
}
class son extends father {
	public void sleep(){
		System.out.println("son sleep()");
	}
	public void eat(){
		System.out.println("son eat()");
	}

}

public class test1 {
	public static void main(String[] args) {
	
	father f = new son();//向上转型
	f.eat();
	//f.sleep()  f虽然也指向了son对象,但是向上转型的代价是会丢丢失与父类不同的方法
	}

}

 向上转型的好处

这样使代码变得简洁。体现了JAVA的抽象编程思想

  

 


 向下转型


class father {
    public void eat(){
        System.out.println("father eat()");
    }
}
class son extends father {
    public void sleep(){
        System.out.println("son sleep()");
    }
    public void eat(){
        System.out.println("son eat()");
    }

}

public class test1 {
    public static void main(String[] args) {
    
    father f = new son();//向上转型
    f.eat();
    //f.sleep()  f虽然也指向了son对象,但是向上转型的代价是会丢丢失与父类不同的方法
    son s = (son)f;//向下转型
    s.eat();
    s.sleep();
    /*
     * 这种方法运行的时候会报错
    father fa = new father();
    son so = (son)fa;
    so.eat();
    so.sleep();
    */
    }

}

Java为了解决不安全的向下转型问题,引入泛型的概念

为了安全的类型转换,最好先用 if(A instanceof  B) 判断一下


 总结

扫描二维码关注公众号,回复: 3958767 查看本文章

1、父类引用可以指向子类对象,子类引用不能指向父类对象。

2、把子类对象直接赋给父类引用叫upcasting向上转型,向上转型不用强制转型。

   如Father father = new Son();

3、把指向子类对象的父类引用赋给子类引用叫向下转型(downcasting),要强制转型。

   如father就是一个指向子类对象的父类引用,把father赋给子类引用son 即Son son =(Son)father;

   其中father前面的(Son)必须添加,进行强制转换。

4、upcasting 会丢失子类特有的方法,但是子类overriding 父类的方法,子类方法有效

5、向上转型的作用,减少重复代码,父类为参数,调有时用子类作为参数,就是利用了向上转型。这样使代码变得简洁。体现了JAVA的抽象编程思想。

猜你喜欢

转载自www.cnblogs.com/zero-vic/p/9917125.html
今日推荐