一起来学习系列: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、子类必须重写父类方法

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

在这里插入图片描述

扫描二维码关注公众号,回复: 12404228 查看本文章

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

向上转型

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

向下转型

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

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

总结:

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

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

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

多态的优点与缺点

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

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

猜你喜欢

转载自blog.csdn.net/weixin_51443782/article/details/109583097