java之 向上转型与向下转型

向上转型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的抽象编程思想安全

  

 


 向下转型spa


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为了解决不安全的向下转型问题,引入泛型的概念code

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


 总结blog


 

一、父类引用能够指向子类对象,子类引用不能指向父类对象。ast

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

   如Father father = new Son();test

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

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

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

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

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

相关文章
相关标签/搜索