概述java中的多态

1.当子类对象调用重写后的方法时,调用的是子类重写后的方法

我们写一个实例帮助理解
我们写一个父类:

public class Mammal {
	
	public void move() {
		System.out.println("正在游动、、、、");
	}
}

子类:

public class Whale extends Mammal {
	
	public void move() {
		System.out.println("正在移动、、、、");
	}
}

再写一个类

public class Earth {

	public static void main(String[] args) {
		Whale whale = new Whale();
		whale.move();
		
	}
}	

结果是:

正在移动、、、、

2.自动类型转换:

我们在学C语言的时候,都见过这样的代码:

double price = 9;

这是不出错的,那么为什么他不出错呢?因为9是int类型,int类型的范围小于double类型,所以他不会出错。就好像一瓶350ml的水杯里的水一定能放在500ml水杯里面而且永远不会溢出一样。
那么与此相类似的是下面的代码:

Mammal mammal = new Whale();

这里的Mammal就好像double,都是什么类型的意思。
mammal 就是 price,一个变量。
new Whale()就相当于9。

本来new Whale()是一个Whale类型的对象,但是它的范围没有Mammal类型大。所以将一个小类型的值放在大类型下面是可以的。

父类类型的变量指向其子类创建的对象
这叫做对象上转型 new Whale()称为上转型对象

3.两个状态:

表面调用的是父类的方法;
但是执行时由于mammal存的是子类创建的对象的地址,
所以执行时执行的是子类中的方法

我们看一个实例

public class Earth {
	public static void main(String[] args) {
		Mammal mammal = new Whale();
		mammal.move();
	}
}

结果是:

正在移动、、、、

由于mammal是Mammal类型,所以我们看着好像是调用的父类Mammal中的方法,
实际上,mammal中存的是new Whale()的地址,所以mammal.move就是new Whale().move
由此,执行的是子类Whale中的方法。

4.

(1)如果编译时类型和运行时类型相同,则一定不会出现多态;√
(2)如果编译时类型与运行时类型不相同,则一定出现多态x

举例:
(1)

Whale  whale= new Whale();

5.上转型对象不能调用子类新增的方法 和新增加的属性

在子类中增加

public void breath() {
		System.out.println("正在呼吸、、、、");
	}

在Erath中调用breath方法,我们发现,出错了。
在这里插入图片描述
事实上:上转型对象不能调用子类新增的方法 和新增加的属性 。

6.在上转型对象中如何实现调用子类新增的方法 和新增加的属性?

使用对象下转型
下转型的前提是先出现上转型对象
如:

Mammal mammal = new Mammal();
Whale whale = (Whale)mammal;

这就不叫对象下转型,因为下转型的前提是先出现上转型对象。这里没有上转型对象。

7.在多态的前提下,父类中被子类重写的方法没有必要有方法体,所以这个方法被称为抽象方法。

如果一个类里面有抽象方法,那么这个类被称为抽象类。
如果一个抽象类里面都是抽象方法,那么这个类被称为接口。

多态包括:

  1. 抽象类
  2. 接口
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值