Java面向对象三大特性之继承

Java里,多态分为两种:
操作符的多态
+ 可以作为算数运算,也可以作为字符串连接

类的多态
父类引用指向子类对象
 

———————————————————————————————————————————
 

操作符的多态

同一个操作符在不同情境下,具备不同的作用
如果+号两侧都是整型,那么+代表 数字相加
如果+号两侧,任意一个是字符串,那么+代表字符串连接

代码示例如下:
 

public class OperatorPolymorphism {

	public static void main(String[] args) {
		int a = 5;
		int b = 6;
		int c = a + b; // 如果+号两侧都是整型,那么+代表 数字相加

		System.out.println(c);

		int x = 5;
		String y = "5";

		String z = x + y; // 如果+号两侧,任意一个是字符串,那么+代表字符串连接
		System.out.println(z);

	}

}

运行结果如下:
 

11
55


———————————————————————————————————————————
 

观察类的多态现象

观察类的多态现象:
1. a1和a2都是Animal类型
2. 都调用eat()方法
3. 输出不同的结果

多态: 都是同一个类型,调用同一个方法,却能呈现不同的状态

 

代码如下:
Animal类 作为父类:

public class Animal {

	public void eat() {
		System.out.println("动物具有吃东西的能力!");
	}
	public static void main(String[] args) {
		Animal a1 = new Dog();
		Animal a2 = new Cat();
		
		a1.eat();
		a2.eat();
	}
}

 

Dog和Cat作为其子类:
 

public class Dog extends Animal{
	public void eat(){
		System.out.println("狗是吃骨头的~");
	}
}
public class Cat extends Animal{
	public void eat(){
		System.out.println("猫是吃鱼的~");
	}
}

 

Animal类中的main方法,输出结果如下:

狗是吃骨头的~
猫是吃鱼的~


 

———————————————————————————————————————————

 

类的多态条件

要实现类的多态,需要如下条件
1. 父类(接口)引用指向子类对象
2. 调用的方法有重写
那么多态有什么作用呢? 通过比较不使用多态使用多态来进一步了解
 

不使用多态

如果不使用多态,
假设人类要喂养狗和猫,就需要为人类设计两个方法
feedTheDog( )
feedTheCat( )

此外,人与动物之间的每一种互动,因此都要单独写一个方法,比如
touchTheCat( )
touchTheDog( )
等等。
除了Dog和Cat以外,还有很多种动物,那就要设计更多的方法,很麻烦!

代码如下:
 

public class Human {

	public void feedTheDog(Dog dog) {
		dog.eat();
	}

	public void feedTheCat(Cat cat) {
		cat.eat();
	}

	public static void main(String[] args) {
		Human Tom = new Human();
		Dog dog = new Dog();
		Cat cat = new Cat();

		Tom.feedTheDog(dog);
		Tom.feedTheCat(cat);
	}

}

 

 

使用多态

如果动物的种类特别多,那么就需要设计很多的方法
比如feedTheDog( ),feedTheCat( )等等

这个时候采用多态来解决这个问题
设计一个方法叫做feedTheAnimal( ),其参数类型是Animal
如果是需要feedTheDog( ),调用该方法
如果是 需要feedTheCat( ) ,还是调用该方法
无论feed什么动物,只需要一个方法即可

代码如下:
 

public class Human {

	public void feedTheAnimal(Animal animal) {
		animal.eat();
	}

	public static void main(String[] args) {
		Human Tom = new Human();
		Dog dog = new Dog();
		Cat cat = new Cat();

		Tom.feedTheAnimal(dog);
		Tom.feedTheAnimal(cat);
	}

}

 

转载于:https://my.oschina.net/u/3421709/blog/1047915

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值