Java:多态 之 向上转型

本文详细探讨了Java中的多态概念,特别是关于对象的向上转型。通过实例解析了Animal、Cat和Dog类之间的继承关系,并在test.java中展示了具体的向上转型语法和用法,揭示了多态在代码中的灵活应用。
摘要由CSDN通过智能技术生成

知识总结:

父类:

Animal.java:

package com.imooc.animal;

public class Animal {
     private String name;
     private int month;
     
     
     public Animal(){
    	 
     }
     
     public Animal(String name,int month){
    	 this.setName(name);
         this.setMonth(month);
     }

     //eat()
     public void eat(){
    	 System.out.println("动物都又吃东西的能力!");
     }
     
    //getter/setter
	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getMonth() {
		return month;
	}

	public void setMonth(int month) {
		this.month = month;
	}
     
     
     
     
}


Cat.java:

package com.imooc.animal;

public class Cat extends Animal {
      
	private String name;
	private int month;
	private double weight;
	
	public Cat(){
		
	}
	
	public Cat(String name,int month,double weight){
		super(name,month);//super父类属性构造方法赋值
		setWeight(weight);
	}
	
	//run
	public void run(){
		System.out.println("猫会跑");
	}
	
	//方法重写
	@Override
	public void eat() {
		System.out.println("猫吃鱼!");
	}
	
	
	//getter/setter
	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getMonth() {
		return month;
	}

	public void setMonth(int month) {
		this.month = month;
	}

	public double getWeight() {
		return weight;
	}

	public void setWeight(double weight) {
		this.weight = weight;
	}
	
	
}


Dog.java:

package com.imooc.animal;

public class Dog extends Animal {
      private String name;
      private int month;
      private String sex;
      
      
      public Dog(){
    	  
      }
      
      public Dog(String name,int month,String sex){
    	  super(name,month);
    	  this.setSex(sex);
      }

    //sleep
  	public void sleep(){
  		System.out.println("小狗会午睡");
  	}
  	
  	//方法重写
  	@Override
  	public void eat() {
  		System.out.println("狗吃肉!");
  	}
    
  	
  	//getter/setter
	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getMonth() {
		return month;
	}

	public void setMonth(int month) {
		this.month = month;
	}

	public String getSex() {
		return sex;
	}

	public void setSex(String sex) {
		this.sex = sex;
	}
      
     
      
}


test.java:

package com.imooc.test;

import com.imooc.animal.Animal;
import com.imooc.animal.Cat;
import com.imooc.animal.Dog;

public class test {

	public static void main(String[] args) {
		Animal one=new Animal();//1
		

/*

* 向上转型(隐式转型),自动转型

* 父类引用指向子类的实例,可以调用子类重写父类的方法以及父类的派生方法,但是该对象无法调用子类独有的方法

* 注意:父类中的静态方法无法被子类重写,所以向上转型之后,只能调用父类原油的的静态方法

* 小类转大类

*/

Animal two=new Cat();//2 Animal three=new Dog();//3 one.eat(); two.eat(); three.eat(); two.setMonth(3); two.getMonth(); three.setName("花花"); three.getName(); //two.run();编译错误 //three.sleep();编译报错 } }


向上转型也可以写成:



执行情况:



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值