Java面向对象编程-多态-09

多态

为什么使用多态

在这里插入图片描述

▪ 狗狗类
	– 增加狗狗吃东西的方法
	
▪ 企鹅类
	– 增加企鹅吃东西的方法
	
▪ 创建主人类
	– 编写给狗狗喂东西的方法
	– 编写给企鹅喂东西的方法
	
▪ 编写测试方法
	– 调用主人类给狗狗喂的方法
	– 调用主人类给企鹅喂的方法

在这里插入图片描述

什么是多态

在这里插入图片描述

如何实现多态

在这里插入图片描述

使用父类作为方法形参实现多态

在这里插入图片描述

父类到子类的转换

在这里插入图片描述

向下转型(强制类型转换)

在这里插入图片描述

instanceof运算符

对象 instanceof 类或接口
instanceof通常和强制类型转换结合使用

小结

类型转换
向上转型——子类转换为父类,自动进行类型转换
向下转型——父类转换为子类,结合instanceof运算符进行强制类型转换

实现多态的两种方式
	使用父类作为方法形参实现多态
	使用父类作为方法返回值实现多态
	使用多态的好处?
	
多态可以减少类中代码量,可以提高代码的可扩展性和可维护性
	引用变量的两种类型:
		编译时类型(模糊一点,一般是一个父类)
			由声明时的类型决定。
		运行时类型(运行时,具体是哪个子类就是哪个子类)
			由实际对应的对象类型决定。
			
多态的存在要有3个必要条件:
	要有继承,要有方法重写,父类引用指向子类对象

多态 polymorphism

多态性是OOP中的一个重要特性,主要是用来实现动态联编的,换句话说,就是程序的最终状态只有在执行过程中才
被决定而非在编译期间就决定了。这对于大型系统来说能提高系统的灵活性和扩展性。
java中如何实现多态?使用多态的好处?
	引用变量的两种类型:
		编译时类型(模糊一点,一般是一个父类)
		由声明时的类型决定。
	运行时类型(运行时,具体是哪个子类就是哪个子类)
		由实际对应的对象类型决定。
多态的存在要有3个必要条件:
	要有继承,要有方法重写,父类引用指向子类对象

多态示例代码

package object;
public class TestPolym {

public static void main(String[] args) {
		Animal animal = new Dog(); //向上可以自动转型
		System.out.println(animal.age); //属性调用时,仍然是基类的属性。属性没有多态!
		// animal.shout();
		animalCry(new Dog());
		//传的具体是哪一个类就调用哪一个类的方法。大大提高了程序的可扩展性。
		//如果没有多态,我们这里需要写很多重载的方法。如果增加一种动物,就需要重载一种动物的喊叫方法。非常麻烦。
		 //有了多态,只需要增加这个类继承Animal基类就可以了。
		animalCry(new Cat());
		Dog dog = (Dog) animal; //编写程序时,如果想调用运行时类型的方法,只能进行类型转换。不然通不过编译器的检查。
		dog.gnawBone();
		System.out.println(dog instanceof Animal);
		System.out.println(animal instanceof Cat);
		System.out.println(animal instanceof Dog);
}
		static void animalCry(Animal a){
		a.shout();
	}
}
class Animal {
		int age=10;
		public void shout(){
			 System.out.println("叫了一声!");
		}
}
class Dog extends Animal {
		int age=28;
		public void shout() {
 		System.out.println("旺旺旺!");
	}
		public void gnawBone(){
		 System.out.println(“我在啃骨头");
	}
}
class Cat extends Animal {
		int age=18;
		public void shout() {
		System.out.println("喵喵喵喵!");
	}
}

引用数据类型的类型转换

▪ 子类转换为父类:自动转换

	– 上转型对象丌能操作子类新增的成员变量和方法。
	
	– 上转型对象可以操作子类继承或重写的成员变量和方法
	
	– 如果子类重写了父类的某个方法,上转型对象调用该方法时,是调用的重写方法。
	
▪ 父类转换为子类:强制转换

	– (绝不是做手术,而是父类的真面目就是一个子类,否则会出现类型转换错误)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值