多态和多态转型


多态概述

多态:

可以理解为事物存在的多种体现形态。

1、多态的体现

父类的引用指向了自己的子类对象。

父类的引用也可以接受自己的子类对象。

2、多态的前提

必须是类与类之间有关系,要么继承,要么实现。

通常还有一个前提,存在覆盖。

3、 多态的好处

多态的出现大大的提高了程序的扩展性.

        多态的弊端:

提高了扩展性,但是只能使用父类的引用访问父类中的成员。

4、多态的应用

5、多态的出现代码中的特点(多态使用的注意事项)。

多态转型

多态转型(类型提升/向上转型、向下转型)

如果想要调用子类的特有方法时,强制将父类的引用转成子类类型。

多态自始至终都是子类对象在做着变化。

******************************************

在多态中【<非静态>成员函数】的特点:

在编译时期:参阅引用型变量所属的类中是否有调用的方法。如果有,编译通过,否则失败。 

在运行时期:参阅对象所属的类中是否有调用的方法。

简单总结就是:成员函数在多态调用时,编译看左边,运行看右边。 

在多态中,【成员变量】的特点:

无论编译和运行,都参考左边(引用变量所属的类)。

在多态中,【静态成员函数】的特点:

无论编译和运行,都参考左边。


package chapter04;
//定义一个抽象类 Animal
abstract class  Animal
{
	int num=5;
	abstract void eat();
	//void eat(){}
	public void sleep()
	{
		System.out.println("晚上睡觉");
	}
	public static void speak()
	{
		System.out.println("听见动物叫");
	}
}
//对Animal类的对象或者子类对象进行操作
class DoAnimal
{
	public static void doAnim(Animal anim)  
	{
		anim.eat();
		anim.sleep();
		anim.speak();
	}
}
//Animal的子类Cat,在其中实现抽象方法eat(),覆盖方法sleep(),覆盖静态方法speak()。
class Cat extends Animal
{
	int num=88;
	public void eat()
	{
		System.out.println("吃鱼");
	}
	public void sleep()
	{
		System.out.println("白天睡觉");
	}
	public static void speak()
	{
		System.out.println("听见猫叫");
	}


}
//Animal的子类Dog,在其中实现抽象方法eat(),覆盖静态方法speak()。

class Dog extends Animal
{
	public void eat()
	{
		System.out.println("吃骨头");
	}
	public static void speak()
	{
		System.out.println("听见狗叫");
	}


}


class MultiDemo
{

	public static void main(String[] args) 
	{

		/*
		在多态中,非静态成员函数在多态调用时,编译看左边,运行看右边。
		在多态中,静态成员函数的特点:无论编译和运行,都参考左边。
		*/
		DoAnimal.doAnim(new Cat());
		DoAnimal.doAnim(new Dog()); 
		
		/*
		在多态中,【成员变量】的特点:无论编译和运行,都参考左边(引用变量所属的类)。
		*/
		Animal anim=new Cat();
		System.out.println(anim.num);//结果显示为5
	}


}





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值