一起来学习系列:Java面向对象——多态

多态

概念

同一类的不同子类形态。可以声明,父类对象变量保存子类对象的形式

现实生活中存在很多多态的例子。
例如:水在100摄氏度的高温下是气体,在常温下是液体,在0摄氏度以下是固体。这里的多态是指一个对象具有多种形态

OOP中的多态与之类似。
同一个引用类型,使用不同的实例可以执行不同的操作,即父类引用子类对象——向上转型。

java中的多态理解为另一种数据类型转换

//宠物类
public class Pet {
	public String name = "无名氏";   // 宠物昵称
	public Pet(String name){
		this.name=name;
	}
	public void eat(){	}
}

//狗类
public class Dog extends Pet{
	public Dog(String name) {
		super(name);
	}
	@Override
	public void eat() {
		 System.out.println("狗"+name+"吃骨头");
	}
}

//猫
public class Cat extends Pet{
	public Cat(String name) {
		super(name);
	}
	@Override
	public void eat() {
		 System.out.println("猫"+name+"吃鱼");
	}
}
//主人类
public class Master {
	public void food(Pet pet) {
	 
		pet.eat();
	}
}
//测试类
public class Test {
	public static void main(String[] args) {
		  Master m=new Master();//主人对象 
		  //向上转型
		  //声明父类变量 保存子类对象
		  //jvm在调用方法时会自动根据实际对象调用方法
		  Pet dog=new Dog("大黄");
		  Pet cat=new Cat("花花");
		  m.food(dog);
		  m.food(cat);
	}
}

多态的使用

1、必须发生继承

只有发生继承多个对象才能进行联系

2、向上转型

声明父类变量保存子类对象,这样才能使用同一个变量表示多个不同相关联的变量,jvm在进行使用时会根据不同对象进行使用

3、子类必须重写父类方法

如果多个子类没有重写父类方法,在使用方法时,如果不重写父类方法,那么调用的还是父类方法,多态没有意义,并且由于声明的是父类变量所以只能调用父类声明过的方法

在这里插入图片描述

子类对象存储至父类变量时,与子类一同创建的父类对象可以直接赋值,但子类中额外的属性与方法在声明的父类变量中并没有进行声明,父类变量会帮子类对象进行存储但是,不能使用

向上转型

声明父类变量保存子类对象(类似于自动类型转换)

向下转型

声明子类变量保存父类对象(类似于强制类型转换)

向下转型成功的前提条件:当前父类是由要转换的子类对象向上转型得来的(这个对象曾经就是这个类的对象)

总结:

1、多态发生的条件继承、向上转型、重写

2、只能使用子类重写父类的方法以及父类特有的属性与方法

3、向下转向成功的前提:曾经发生过向上转型

多态的优点与缺点

优点:提高了代码的维护性与扩展性

缺点:只能在继承后的子类中使用,并且只能使用子类重写父类的方法而不能使用子类特有的方法

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值