【JavaSE】解密 继承和多态(上)

前言

本篇将会通过典型代码案例来揭开 Java中继承和多态 的神秘面纱~

欢迎关注个人主页:逸狼


创造不易,可以点点赞吗~

如有错误,欢迎指出~



目录

前言

继承

继承代码举例

子类访问父类的成员变量和方法

子类访问父类的成员变量

super

this和super比较

相同点

区别

​编辑

子类访问父类的成员方法 规则同理

子类与父类的构造方法

执行顺序

代码块的执行顺序

测试代码如下


继承

面向对象思想中提出了继承的概念,专门用来进行共性抽取,实现代码复用。

继承代码举例

Dog和Cat称为子类或派生类,Animal称为父类、基类或超类。Dog和Animal的关系可以简单理解为is-a的关系(即狗是一个动物)

  • 子类会将父类的成员变量和方法继承子类中(子类不用自己再定义了)
  • 子类必须要有自己特有的成员(体现与父类不同)
class Animal{public String name;public int age ;public String color;public void eat(){System.out.println(this.name+"正在吃饭!");}
}
//Dog子类 继承了 Animal父类
class Dog extends Animal{public void bark(){System.out.println(this.name+"正在汪汪汪~");}
}
//Cat子类 继承了 Animal父类
class Cat extends Animal{public void miao(){System.out.println(this.name+"正在喵喵喵~");}
}

子类访问父类的成员变量和方法

子类访问父类的成员变量

  • 子类中有,就优先访问子类的;
  • 子类若没有,访问父类的;
  • 若父类中也没有,会报错。

例如代码

  • 父类和子类都有a,优先使用子类的,所以a=11
  • 子类没有b,父类中有,所以b=2;
  • 父类没有c,子类有,所以c=3;

class Base {public int a = 1;public int b = 2;
}
class Derived extends Base{public int a=11;public int c=3;public void test(){System.out.println("a="+a);System.out.println("b="+b);System.out.println("c="+c);}
}
public class Test2 {public static void main(String[] args) {Derived derived=new Derived();//产生子类对象derived.test();//调用子类的test方法}
}

结果如图

那如果子类和父类都有a的情况下,我想访问父类中的a,应该怎么办呢?

super

super是一个关键字,可以调用父类的成员变量

在上述问题中,我们可以在成员变量a的前面加上super,就可以解决了;

this和super比较

相同点

  1. 都是Java中的关键字
  2. 只能在类的非静态方法中使用,用来访问非静态成员方法和字段
  3. 在构造方法中调用时,必须是构造方法中的第一条语句,并且不能同时存在

区别

  • this的访问范围比super大,它可以访问父类和子类中的成员变量和方法
  • super只是用于访问父类的成员变量

将上面代码加上this和super测试

    public void test(){System.out.println("a="+this.a);System.out.println("a="+super.a);System.out.println("b="+this.b);System.out.println("c="+this.c);}

结果如图

子类访问父类的成员方法 规则同理

  • 只能在非静态方法中使用(因为在静态方法中是不能用this和super的)
  • 在子类方法中,访问父类的成员变量和方法。

子类与父类的构造方法

当子类继承了父类之后,在实例化子类对象之前,要先初始化父类成员

  • 若自己没写父类构造方法,Java中会有一个默认的不带参数的构造方法,子类会自己调用那个默认的构造方法
  • 若自己写了父类构造方法,则要在子类中必须先调用那个存在的构造方法,进行初始化父类成员,否则会报错

初始化父类成员的时候只有一种方法:调用构造方法

    //自己写的父类构造方法public Animal(String name, int age, String color) {this.name = name;this.age = age;this.color = color;}

在子类当中初始化父类成员,例如下图是 调用不带参数的构造方法

利用Java生成带有3个参数(也可以是1个、2个都行)的构造方法,在实例化对象时对父类成员进行赋值

执行顺序

父类构造方法比子类的先执行,

如图测试代码

代码结果

代码块的执行顺序

测试代码如下

结果

通过分析执行结果,得出以下结论:

  1. 父类静态代码块优先于子类静态代码块执行,且是最早执行
  2. 父类实例代码块和父类构造方法紧接着执行
  3. 子类的实例代码块和子类构造方法紧接着再执行
  4. 第二次实例化子类对象时,父类和子类的静态代码块都将不会再执行(只执行一次)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/589421.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据分析之POWER BI Desktop可视化应用案列

在power bi中导入数据 导入前期建好的模型 简单介绍(power bi desktop) 将右边字段全部展开 各类数据 所作的模型 在excel中是单向的,power bi 中可以是双向的 右键单击----点击属性 选择两个---在两个方向上应用安全筛选器 变为双向的…

使用deepspeed,transformers,safetensor中常见的训练精度,共享权重问题

使用deepspeed可能需要注意精度问题 混合精度,LayerNorm 虽然deepspeed有混合精度训练的功能,但是对于网络上各种奇奇怪怪的代码的DIY转化中,他还是很弱小的。它的精度问题,使用deepspeed如果模型中有部分模型使用的是half精度&a…

XenCenter 2024 导入虚拟机

导入虚拟机 虚拟机位置 导入到那一个服务器 导入虚拟机存放存储位置 虚拟机网卡配置 SR修复功能,看自己需求 虚拟机恢复确认最终配置 恢复好的虚拟机 虚拟机模板转换

第十四届省赛大学B组(C/C++)子串简写

原题链接:子串简写 程序猿圈子里正在流行一种很新的简写方法: 对于一个字符串,只保留首尾字符,将首尾字符之间的所有字符用这部分的长度代替。 例如 internationalization 简写成 i18n,Kubernetes 简写成 K8s&#…

2024阿里云域名优惠口令免费领取,COM、CN和xin域名口令

2024年阿里云域名优惠口令,com域名续费优惠口令“com批量注册更享优惠”,cn域名续费优惠口令“cn注册多个价格更优”,cn域名注册优惠口令“互联网上的中国标识”,阿里云优惠口令是域名专属的优惠码,可用于域名注册、续…

前端-css-2

1.背景样式 属性名作用属性值background-color背景颜色颜色background-image设置背景图像地址url(地址)background-repeat设置背景图像重复方式 repeat:重复。 repeat-x:横向重复。 repeat-y:纵向重复。 no-repeat:不重复。 back…

Tinymce富文本编辑器二次开发电子病历时解决的bug

前言 本文是在Tinymce富文本编辑器添加自定义toolbar,二级菜单,自定义表单,签名的基础之上进行一些bug记录,功能添加,以及模版的应用和打印 项目描述 建立电子病历模版—录入(电子病历模版和电子病历打印…

rocketmq的运维

1. admintool创建topic的时候 -o 的用法含义 https://rocketmq.apache.org/zh/docs/4.x/producer/03message2/ 有关orderMessageEnable和returnOrderTopicConfigToBroker的设置可以参考 https://blog.csdn.net/sdaujsj1/article/details/115741572 -c configFile通过-c命令指…

用ENIGMA-toolbox作图

之前一直使用ggseg呈现结果,最近想试一试其他绘图工具。ENIGMA-toolbox有所了解,绘图功能看起来门槛不高,所以就试着用它呈现一些结果。Matlab版本的ENIGMA-toolbox直接使用就是SurfStat的功能绘图,Python版本的绘图功能应该是根据…

蓝桥杯刷题第八天(dp专题)

这道题有点像小学奥数题,解题的关键主要是: 有2种走法固走到第i级阶梯,可以通过计算走到第i-1级和第i-2级的走法和,可以初始化走到第1级楼梯和走到第2级楼梯。分别为f[1]1;f[2]1(11)1(2)2.然后就可以循环遍历到后面的状态。 f[i…

014——超声波模块驱动开发Plus(基于I.MX6uLL、SR04和poll机制)

目录 一、基础知识 二、分析为什么打印会影响中断 三、驱动程序 四、应用程序 五、验证及其它 一、基础知识 013——超声波模块驱动开发(基于I.MX6uLL与SR04)-CSDN博客 二、分析为什么打印会影响中断 asmlinkage __visible int printk(const ch…

Chatgpt掘金之旅—有爱AI商业实战篇|聊天机器人|(四)

演示站点: https://ai.uaai.cn 对话模块 聊天机器人企业知识库:https://work.jingyuai.com/ 鲸鱼AI知识库 官方论坛: www.jingyuai.com 京娱AI 聊天机器人创建服务,随着企业越来越多地寻求创新的方式与客户互动,聊天机…