论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
IT评测·应用市场-qidao123.com
»
论坛
›
软件与程序人生
›
后端开发
›
Java
›
关于java中的多态和对实例化对象的一些理解 ...
关于java中的多态和对实例化对象的一些理解
何小豆儿在此
金牌会员
|
2023-5-3 16:29:05
|
显示全部楼层
|
阅读模式
楼主
主题
884
|
帖子
884
|
积分
2652
java面向对象三大特征即为:继承封装多态。而多态需要三大必要条件。分别是:继承、方法重写、父类引用指向子类对象。我们先一个一个来理解。
1、首先是继承和重写。这个很简单。因为多态就是建立在不同的重写之上的。也就是说多态就是在使用着一个方法的不同重写。而重写又是依赖着继承关系。
2、这个父类引用指向子类对象。
首先先上代码示例。
public class Animal {
public void Shout(){
System.out.println("叫叫叫");
}
public void Hi(){
System.out.println("打招呼");
}
}
class Dog extends Animal{
public void Shout(){
System.out.println("汪汪汪");
}
public void seeHouse(){
System.out.println("看家");
}
}class Cat extends Animal{
public void Shout(){
System.out.println("喵喵喵");
}
}
class goose extends Animal{
public void Shout(){
System.out.println("嘎嘎嘎");
}
}
复制代码
public class TestPolym {
public static void main(String[] args) {
AnimalShout(new Dog());
AnimalShout(new goose());
}
static void AnimalShout(Animal animal){
animal.Shout();
}
}
复制代码
在如上代码中,Animal类是作为dog、cat、goose的父类。而TestPolym则是用于实现多态
先解释下父类引用指向子类对象:在TestPolym类中的AnimalShout方法中,接收着Animal类的对象。这就是父类的引用;
指向子类对象则是看这一行:
AnimalShout(new Dog());
这里其实可以理解为:
Animal animal = new Dog();
其实这一行打出来基本就可以理解个七七八八。这句话就是定义了一个对象 animal 然后将其实例化成 类型为 Animal 的Dog()。因为Dog、Cat这些是Animal的子类,所以类型 Animal >= Dog、Cat......这些子类。所以首先指向子类是成立的。
其次在 Animal animal = new Dog(); 这个构造器真实的类型为Dog,但是! 编译器在看animal这个对象的时候,只会将他识别为Animal类型。而这行代码成立的最重要的原因是:Dog是Animal的一个子类,并且Dog类总是小于等于Animal类。然后我们看一下我们在使用什么方法。这个方法是Shout。是由Animal重写而来。因此在调用由Dog类重写Animal类的方法如此代码中的Shout方法时,此语句成立。
反之,使用此语句去运行不是由Animal类中的方法重写而来的方法时,此语句会报错。例如用这一行去调用seeHouse时
[/code][img]https://img2023.cnblogs.com/blog/3174609/202305/3174609-20230503155510463-540718600.png[/img]
编译器会红,并且建议你在Animal中创建这样一个方法,那我们去创建一下。之后就会发现,Animal和Dog两个类中都有Hi方法了,又变成重写了!而且程序也能跑的通了。所以本质上还是Animal类包含(抽象一点的)Dog类。
[code]<br><br><br>
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
使用道具
举报
0 个回复
正序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
发新帖
回复
何小豆儿在此
金牌会员
这个人很懒什么都没写!
楼主热帖
使用 Mypy 检查 30 万行 Python 代码, ...
K3S系列文章-使用AutoK3s在腾讯云上安 ...
day05-优惠券秒杀01
再次入坑写学习笔记
mysql8.0.25安装配置教程(windows 64位 ...
1.2 Hadoop简介-hadoop-最全最完整的保 ...
3分钟告诉你如何成为一名黑客?|零基础 ...
TechEmpower 21轮Web框架 性能评测 -- ...
JS:函数自调用
由ASP.NET Core读取Response.Body引发 ...
标签云
存储
服务器
浏览过的版块
数据仓库与分析
快速回复
返回顶部
返回列表