JAVA-------多态详解

多态: 同一个对象,在不同时刻表现出的不同形态

  • 举例:猫
    我们可以说猫是猫:猫 cat = new 猫();
    我们也可以说猫是动物:动物 animal=new 猫();
    这里猫在不同时刻表现出不同的状态,这就是多态

  • 多态的前提和实现:
    1. 有继承/实现关系
    2. 有方法重写
    3. 有父类引用指向子类对象

  • 多态的好处:

    • 定义方法的时候,使用父类型作为参数,将来在使用的时候,使用具体的子类型参与操作
  • 多态的弊端:

    • 不能使用子类的特有功能

下面看代码

animal类:

public class animal {
    
    
	
	public int age=40;
	
	public void eat() {
    
    
		System.out.println("动物吃东西");
	}
}

cat类: 对animal进行重写

public class cat extends animal {
    
    
	
	public int age=20;
	public int weight=10;
	
	@Override
	public void eat() {
    
    
		// TODO Auto-generated method stub
		System.out.println("猫吃鱼");
	}

	public void playgame() {
    
    
		System.out.println("猫捉迷藏");
	}
}

dog类: 对animal进行重写

public class dog extends animal {
    
    
	@Override
	public void eat() {
    
    
		System.out.println("狗吃骨头");
	}
}

animalOperation类:

public class animalOperation {
    
    
	public void useAnimal(cat c) {
    
    
		c.eat();
	}
	
	public void useAnimal(dog d) {
    
    
		d.eat();
	}
	}
}

main主类:

public class animalDemo {
    
    
	public static void main(String[] args) {
    
    
		//有父类引用指向子类对象
		animal a=new cat();
		
		//多态访问成员变量编译和运行都要看animals有没有
		System.out.println(a.age);//输出40

		//多态访问成员方法编译看左边,运行看右边
		a.eat();
		
		//创建动物操作类对象,调用方法
		animalOperation ao=new animalOperation();
		cat c=new cat();
		ao.useAnimal(c);
		
		dog d=new dog();
		ao.useAnimal(d);
		
	}
}

这里需要注意一点多态对成员变量以及成员方法的访问方式!!

比如这里创建一个多态类,左边是animal类,右边cat类是animal类的子类

animal a=new cat();
  • 此时多态访问成员变量的时候,无论是编译还是运行看的都是animal类中有没有,因此访问成员变量时,编译和运行都是看左边

  • 多态访问成员方法的时候,编译看的是animal,运行看的是cat,也就是说,编译的时候看的是左边animal有没有这个方法,运行的时候看的是右边cat中的方法,因此访问成员方法时,编译看左边,运行看右边


而多带的好处就在于:定义方法的时候,使用父类型作为参数,将来在使用的时候,使用具体的子类型参与操作

可以看到上边的animalOperation类中每定义一个新类时,都需要对该类进行方法重写,而多态正是解决了这个问题,可以把上边代码改为这样,参数直接用父类即可,而调用的时候可直接使用子类进行调用。


public class animalOperation {
    
    
	
	public void useAnimal(animal a) {
    
    
		//等同于animal a=new cat();
		//animal a=new dog();
		a.eat();
	}
}

猜你喜欢

转载自blog.csdn.net/weixin_45102820/article/details/113122246