Java的多态

多态概述
同一个对象,在不同时刻表现出来的不同形态
在这里插入图片描述
在这里插入图片描述
有父类引用指向子类对象的理解:就是上面动物 animal = new 猫(),这个动物就是父类,猫就是子类对象

具体实现步骤
先要有继承,然后在派生类中方法重写,然后在测试类中这么写:

父类名 a=new 子类名();

多态中成员访问特点
虽说我们创建的是子类的对象,但是外界看到的只是父类的引用

所以我们通过多态的形式访问成员变量时,他的编译要看左边,即调用成员变量时,要先看父类中有没有,父类中有才行

且通过多态形式访问成员变量,我们访问到的是父类中的,即运行也要看左边

通过多态访问成员方法也是看左边,要先看父类中有没有

但是运行时侯看子类,即此时输出的内容就是子类的对象调用的了在这里插入图片描述
多态的好处和弊端

好处:如果在一个测试类中,要调用很多次不同功能,但是方法名相同的方法,我们就可以不用方法重载,而使用多态,直接把形参改为父类的,然后进行多态即可

在定义方法时,使用父类作为参数,在具体操作时,使用子类参与操作

但是通过多态的形式,他不能访问具体的子类所特有的功能,如果在父类没有这个方法,那么我们就不能访问在这里插入图片描述
多态中的转型
在这里插入图片描述
向上转型
把子类对象赋值给父类引用,即

Animal a=new Cat();

向下转型
父类引用强转为子类对象,即

Cat c=(Cat) a;

通过向下转型解决了多态不能访问子类特有功能的弊端

但是向下转型只能在父类和子类中转型,不能在继承自同一父类的子类两个之间转型,会报错在这里插入图片描述
在这里插入图片描述
当前面的a已经定义过时,也可以这么向上转型

抽象类
在这里插入图片描述
抽象的方法体必需放在抽象类中
Java的抽象类定义

public abstract class animal{
	public abstract void eat();//抽象方法
}

要有abstract关键字

因为抽象类不是具体的,所以不能创建对象

在抽象类中也可以定义非抽象方法

如果抽象类想要创建对象,得参照多态的形式,通过子类对象来实例化,就是上面写的

派生类继承抽象类的话,必需要重写抽象类中的抽象方法,但是不用加abstract

如果不想重写抽象方法,那么子类本身也得是抽象类在这里插入图片描述
抽象类的成员特点

抽象类可以有构造方法
用于子类要访问父类时,对父类的数据成员进行初始化
在这里插入图片描述
如果子类重写了父类的方法,抽象类调用成员变量时先看子类的,没有才看父类的(其实继承也是如此)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值