Java多态

多态:指的是不同类创建的对象,在调用相同的方法时,呈现出多种不同的行为。

多态体现方式:在有继承关系的父子类中,子类继承父类的方法后,重写父类的方法,当子类创建对象后赋值给父类型的变量,父类型变量调用子类重写后的方法,呈现出多种不同的形态。

一个父类可以有多个子类,多个子类可以重写父类方法;创建的多个子类对象可以指向同一个父类,因此,在程序运行时才能知道具体代表的哪一个子类对象,这样就体现出了多态性。

简述来说:就是父类引用指向子类对象,调用子类方法,呈现出不同形态。

package PolymorphicPro;

abstract class Animal{
	abstract void eat();
}

class Dog extends Animal{
	public void eat() {
		System.out.println("狗在狼吞虎咽地吃肉!");
	}
}

class Cat extends Animal{
	public void eat() {
		System.out.println("猫在细嚼慢咽地吃鱼!");
	}
}

public class TestDemo {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Animal animalOne = new Dog();
		Animal animalTwo = new Cat();
		animalOne.eat();
		animalTwo.eat();
	}

}

执行结果:

 多态使用场景:

场景一:使用父类作为方法形参实现多态,使方法参数的类型更为宽泛。

package PolymorphicPro;

abstract class Animal{
	abstract void eat();
}

class Dog extends Animal{
	public void eat() {
		System.out.println("狗在狼吞虎咽地吃肉!");
	}
}

class Cat extends Animal{
	public void eat() {
		System.out.println("猫在细嚼慢咽地吃鱼!");
	}
}

public class TestDemo {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Animal animalOne = new Dog();
		Animal animalTwo = new Cat();
		
		feed(animalOne);
		feed(animalTwo);
	}

	public static void feed(Animal animal) {//父类作为方法形参实现多态
		animal.eat();
	}
}

执行结果:

场景二:使用父类作为方法返回值实现多态,使方法可以返回不同子类对象。

package PolymorphicPro;

abstract class Animal{
	abstract void eat();
}

class Dog extends Animal{
	public void eat() {
		System.out.println("狗在狼吞虎咽地吃肉!");
	}
}

class Cat extends Animal{
	public void eat() {
		System.out.println("猫在细嚼慢咽地吃鱼!");
	}
}

public class TestDemo {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		String fishName = "fish";
		String boneName = "bone";
		
		Animal animalThree = feed(boneName);
		Animal animalFour = feed(fishName);
		animalThree.eat();
		animalFour.eat();
	}

	public static Animal feed(String feedName) {//父类作为方法返回值实现多态
		Animal animal = null;
		if("fish".equals(feedName))
			animal = new Cat();
		else if("bone".equals(feedName))
			animal = new Dog();
		return animal;
	}
}

执行结果:

 拓展:通过多态,降低了类之间的耦合关系,使得程序的扩展性和维护性提高。 

            耦合:模块与模块之间的关联程度,关联越密切,耦合越高;关联松散,耦合低。

Example:

class Sell{//售卖水果
	public void sellGoods(Apple apple) {
		apple.sell();
	}
	public void sellGoods(Orange orange) {
		orange.sell();
	}
	public void sellGoods(Banana banana) {
		banana.sell();
	}
}

由于sellGoods方法与Apple类形参之间是一 一对应关系,当sellGoods方法里没有传Apple类对应的实参,那么apple.sell();将永远不会执行。同理Orange、Banana和方法sellGoods之间一 一对应,这种关系称为强耦合。如用父类作为方法形参,可以降低耦合度。因为父类可以接收所有子类对象。

如:Apple、Orange、Banana它们的父类是水果类。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值