浅谈java向上转型和向下转型

向上转型:将一个子类的对象赋值给父类变量。

格式:

Father f=new Son();

Father 是父类,Son是子类。

看代码:

package part01;

class Father{
	int i=0;
	
	public void method1() 
	{
		System.out.println("father method");
	}
}

class Son extends Father{
	int i=1;
	@Override
	public void method1()
	{
		System.out.println("son method");
	}
	
	//定义一个父类没有的方法
	public void newmethod()
	{
		System.out.println("子类的新方法");
	}
}


public class Demo01 {

	public static void main(String[] args) {
		
		
		System.out.println("-----------------向上转型——————————————————");
		//向上转型:
		Father f=new Son();
		System.out.println(f.i);
		f.method1();
		//f.newmethod(); 失去父类没有的方法 这个报错。

运行结果:

-----------------向上转型——————————————————
0
son method

发生向上转型之后,

成员变量是父类的,获得的方法是子类的。

因为对象变量,所以失去子类中独有的方法。(就是你调用的话会报错。)

 

向上转型的好处:

方法传值的时候,虽然形参是父类的参数,实际传入的却是子类的参数,大大简化了代码,不必在子类中一个个写相似度很高的代码。看以下例子。

class Father2
{
	public void method()
	{
		System.out.println("Father method");
	}
}

class Son1 extends Father2
{
	public void method()
	{
		System.out.println("son1 method ");
	}
}

class Son2 extends Father2
{
	public void method()
	{
		System.out.println("son2 method");
	}
}

public class Demo02 {

	public static void main(String[] args) {
		//传入的是子类的对象。
		test(new Son1());
		test(new Son2());

	}
public static void test(Father2 f)
{
	f.method();
}
}

运行结果:

son1 method 
son2 method
 

 

向下转型:

就是在向上转型的基础上,再将父类变量赋给子类的变量,这样就可以调动所有子类的变量和方法了。

格式:

Father f=new Son();

Son s=(Son)f;

看一下代码:

package part01;

class Father{
	int i=0;
	
	public void method1() 
	{
		System.out.println("father method");
	}
}

class Son extends Father{
	int i=1;
	@Override
	public void method1()
	{
		System.out.println("son method");
	}
	
	//定义一个父类没有的方法
	public void newmethod()
	{
		System.out.println("子类的新方法");
	}
}


public class Demo01 {

	public static void main(String[] args) {
		
	
		
		System.out.println("-----------向下转型----------------");
		Father f2=new Son();
		//子类对象变量指向子类的实例,所以全部都是子类了无论调用的是方法还是变量。
		Son s2=(Son)f2;
		System.out.println(s2.i);
		s2.method1();
		s2.newmethod();
		
	}
	

}

运行结果:

-----------向下转型----------------
1
son method
子类的新方法
 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值