向上转型于与向下转型理解

 向上转型:子类引用的对象转换为父类类型称为向上转型。通俗地说就是是将子类对象转为父类对象。

public class Animal {
	public void eat() {
		System.out.println("animal eatting...");
	}
	
}

class Cat extends Animal {

	public void eat() {
		System.out.println("我吃鱼");
		//super.eat();
	}
	
}
class Dog extends Animal {
	public void eat() {
		System.out.println("我吃骨头");
		//super.eat();
	}
	public void run(){
        System.out.println("我会叫,,汪,汪,汪");
    }
}
public class Test{
    public static void main(String[] args) {
		 //Animal animal = new Cat(); //向上转型
	     //animal.eat();
	     //animal = new Dog();
	     //animal.eat();
        eat(new Cat());
		eat(new Dog());
            
	}
     public static void eat(Animal A) {//方法的参数是父类------!!!
		 A.eat();
    }
}

Animal animal = new Cat();将子类对象Cat转化为父类对象Animal。这个时候animal这个引用调用的方法是子类方法。

向上转型的好处:

  • 减少重复代码,使代码变得简洁。
  • 提高系统扩展性。

如果不进行向上转型代码如下

public class Animal {
	public void eat() {
		System.out.println("animal eatting...");
	}
	public static void main(String[] args) {
		Cat cat = new Cat();
		cat.eat();
		Dog dog = new Dog();
		dog.eat();
	}
}

如果有成千上万的动物就得写成千上万的方法。

向下转型

package com.sheepmu;
 class Fruit
  {
	public void myName()
	{
		System.out.println("我是父类  水果...");
	}
}
 
class Apple extends Fruit
{ 
	@Override
	public void myName() 
	{ 
		System.out.println("我是子类  苹果...");
	}
	public void myMore()
	{
		System.out.println("我是你的小呀小苹果~~~~~~");
	}
}
 
public class Sys{ 
	public static void main(String[] args) { 
		Fruit a=new Apple(); //向上转型
		a.myName();
		
		Apple aa=(Apple)a; //向下转型,编译和运行皆不会出错(正确的)
		aa.myName();//向下转型时调用的是子类的
		aa.myMore();;
		  
		Fruit f=new Fruit();
        Apple aaa=(Apple)f; //-不安全的---向下转型,编译无错但会运行会出错
  		aaa.myName();
  		aaa.myMore(); 
	}
}

未完。。。。

猜你喜欢

转载自blog.csdn.net/weixin_42698882/article/details/81591687