Java语言程序设计——篇七(1)

news2024/12/22 8:55:19

在这里插入图片描述

     🌿🌿🌿跟随博主脚步,从这里开始→博主主页🌿🌿🌿

继承

  • 类的继承
    • 实战演练
  • 方法覆盖
    • 实战演练
  • 🍑super关键字
    • 实战演练
  • 调用父类的构造方法

类的继承

通过类的继承方式,可以不用编写相同的代码就能开发出新的类,即程序代码复用。
被继承的类称为父类或超类(superclass),由继承而得到的类称为子类(subclass)。
在这里插入图片描述
Java语言中类的继承是通过extends关键字来实现的,其格式如下:

class SubClass extends SuperClass
       {
            ……
       }
  • 子类可以从父类那里继承所有非private的成员作为自己的成员。
  • 若无extends关键字,则该类默认为java.lang.Object类的子类。
  • 子类的每个对象也是父类的对象(“即是”性质),但父类对象不一定是子类的对象。
  • Java语言中不支持多重继承,所以一个类只能有一个直接父类。
  • 父类是所有子类的公共成员的集合,而每个子类则是父类的特殊化,是对公共成员变量和方法在功能、内涵方面的扩展和延伸。
  • 子类继承父类的成员变量和方法,同时还可修改、重写和添加父类的成员变量和方法。
  • Java语言中有一个名为java.lang.Object的特殊类,所有的类都是直接或间接地继承该类而得到的。

实战演练

【例】类的继承,创建Person类,再以该类为父类创建一个子类Employee。

public class Person {
	public String name;
	public int age;
	public Person(){}
	public Person(String name, int age){
		this.name = name;
		this.age = age;
	}
	public void sayHello(){
		System.out.println("My name is"+name);
	}
}
public class Employee extends Person {
	public double salary;
	public Employee(){}
	public Employee(double salary){
		this.salary = salary;
	}
	public Employee(String name,int age, double salary){
		super(name,age);
		this.salary = salary;
	}
	public double computeSalary(int hours, double rate){
		double salary = hours * rate;
		return this.salary + salary;
	}
}

public class EmployeeTest {
	public static void main(String[] args){
		Employee emp = new Employee("李菲菲",23,5000);
		System.out.println("姓名="+emp.name);
		System.out.println("年龄="+emp.age);
		emp.sayHello();
		System.out.println(emp.computeSalary(10, 50.0));
	}
}

运行结果:
在这里插入图片描述

方法覆盖

  • 覆盖是指在子类中,定义名称、参数个数与类型均与父类完全相同的方法,用以重写父类里同名方法的功能。(private方法不能覆盖、不能覆盖父类中声明static的方法,但可以继承)
  • 覆盖父类的方法:子类继承父类中所有可被访问的成员方法时,若子类的方法与父类的方法同名,则不能继承,此时子类的方法是覆盖父类的方法。
  • 在子类中覆盖方法时,可扩大父类中的方法权限,但不能缩小其权限。

实战演练

【例】子类的方法覆盖父类的方法sayHello()。

@Override//注解表示其后的方法必须是覆盖父类的方法
public void sayHello(){
	System.out.println("Hello, I am" + name);
	System.out.println("I am" + age);
	System.out.println("My salary is" + salary);
}

【例】父类与子类方法相同,但参数不同

public class Parent {
	public void display(int i){
		System.out.println(i);
	}
}
public class Child extends Parent{
	public void display(double i){
		System.out.println(i * 2);
	}
}
Child obj = new Child();
obj.display(10);//10
obj.display(10.0);//20.0

父类的display方法被子类重载了但未覆盖。

🍑super关键字

在子类中访问父类的成员

  • Super关键字:用来引用当前对象的父类对象
  • 使用super不但可以访问父类的构造方法,还可以访问父类的成员变量和成员方法。访问父类成员的格式如下:
  • super.变量名;
  • super.方法名;
在子类调用父类中被覆盖的方法:
	super.methodName([paramlist])
在子类中调用父类的构造方法
	super([paramlist])
在子类中访问父类中的被隐藏的成员变量
	super.variableName

实战演练

public class Parent {
	int x,y;
	public Parent(){
		System.out.println("创建父类对象");
		setXY(5,5);
	}
	public void setXY(int x,int y){
		this.x = x;
		this.y = y;
	}
	public void display(){
		System.out.println("x=" + x +",y=" + y);
	}
}
public class Child extends Parent{	
     int x,z;
	public Child(){
		this(10,10);
	}
	public Child(int x,int z){
		super();
		this.x = x;
		this.z = z;
	}
	public void display(){
		super.display();
		System.out.println("x=" + x +",y=" + y);
System.out.println("super.x="+super.x+",super.y="+super.y);
	}	
}

调用父类的构造方法

  • 调用父类的构造方法super(参数列表)语句必须写在子类构造方法的第一行。 super( )也可以重载。
  • 若没有super()来调用父类中的构造方法,则编译时在子类构造方法第一行自动加上super(),即调用父类中没有参数的构造方法。若此时父类中只定义了有参数的构造方法,则编译错误。
  • super()是从子类构造方法调用父类特定的构造方法;this()是调用本类的其他构造方法。两者都必须写在构造方法的第一行,因此无法同时存在同一个构造方法内。
    博主用心写,读者点关注,互动传真情,知识不迷路

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Qt】QWidget核心属性相关API

目录 一. enabled——是否可用 二. geometry——几何位置 window frame 三. windowTitle——窗口标题 四. windowIcon——窗口图标 ​qrc文件 五. windowOpacity——透明度 六. cursor——光标 自定义光标 七. font——字体 八. toolTip——提示栏 九. focusPolic…

git免密推送代码至仓库gitee/github 常用命令

代码托管 gitee github gitclone 1 生成/添加SSH公钥 ssh-keygen -C "***qq.com"2 gitee添加公钥 查看公钥 cat ~/.ssh/id_rsa.pub然后再gitee添加 3 验证 gitee ssh -T gitgitee.comgithub ssh -T gitgithub.comgitclone:无法测试&#xff0c…

MSSQL注入前置知识

简述 Microsoft SQL server也叫SQL server / MSSQL,由微软推出的关系型数据库,默认端口1433 常见搭配C# / .net IISmssql mssql的数据库文件 数据文件(.mdf):主要的数据文件,包含数据表中的数据和对象信息…

Vue3可媲美Element Plus Tree组件开发之append节点

在前面的章节,我们完成了可媲美Element Plus Tree组件的基本开发。通过实现各种计算属性,tree数据状态变化引起的视图更新被计算属性所接管了,无需我们再手动做各种遍历、查找以及手动监听操作,这样后续开发高级功能变得易如反掌啦…

插入和选择排序

1.1直接插入排序 void InsertSort(int* a, int n) {for (int i 1; i < n - 1; i) {//i的范围要注意的&#xff0c;防止指针越界int end i;int tmp a[end 1];while (end>0) {if (tmp< a[end]) {a[end 1] a[end];//小于就挪动&#xff0c;虽然会覆盖后面空间的值…

Qt Creator平台编译snmp++

声明 &#xff1a;本文的大部分资源参考自文章&#xff0c;编译snmp的方法我也是在这里学习的&#xff0c;结合自己的需求&#xff0c;做了snmp和Agent的混合编译。需要了解更多的详情可以点击链接去看原文&#xff0c;我总结了自己的编译过程&#xff0c;并写下此文作为一个回…

Springboot+vue自制可爱英语日记系统-XD动画测试版

目录 项目背景与愿景 项目流程 需求分析 设计之美 技术实现 部署策略 未来展望 项目寄语 项目预览 项目页面展现 引导页(3张) 首页 日记模块 日记模块-写日记 信箱模块 回收箱模块 前端开发 前端开发概述 关键技术选型 开发流程 后端开发 后端开发概述 …

【算法/训练】:动态规划

一、路径类 1. 字母收集 思路&#xff1a; 1、预处理 对输入的字符矩阵我们按照要求将其转换为数字分数&#xff0c;由于只能往下和往右走&#xff0c;因此走到&#xff08;i&#xff0c;j&#xff09;的位置要就是从&#xff08;i - 1&#xff0c; j&#xff09;往下走&#x…

C++笔记3:基类指针delete子类对象的内存泄漏问题

根据《effective C》第7章所述&#xff0c;new的一个子类对象赋值给基类指针delete的时候为了防止子类的析构函数没有调用要在基类的析构函数加上virtual 关键字&#xff1a; #include <stdint.h> #include <iostream> #include <iomanip> #include <vec…

零代码实现GIS视效提升,一键添加体积云体积雾

在三维GIS开发中&#xff0c;场景的真实感和高效性始终是用户的核心需求。为此&#xff0c;山海鲸可视化提供了完美的解决方案。这款免费可视化工具不仅支持多种GIS影像协议&#xff08;TMS、WMS、WMTS等&#xff09;&#xff0c;还可以一键添加体积云和体积雾效果&#xff0c;…

FastGPT 知识库搜索测试功能解析(一)

本文以 FastGPT 知识库的搜索测试功能为入口,分析 FastGPT 的知识检索流程。 一、搜索功能介绍 1.1 整体介绍 搜索测试功能包含三种类型:语义检索、全文检索、混合检索。 语义检索:使用向量进行文本相关性查询,即调用向量数据库根据向量的相似性检索; 全文检索:使用…

Axure软件新功能解析与应用技巧分享

Axure是一种用于创建原型和交互设计的软件工具&#xff0c;广泛应用于操作界面。&#xff08;UI&#xff09;和客户体验&#xff08;UX&#xff09;为了展示和测试应用程序、网站或其他数据产品的性能和操作界面&#xff0c;设计帮助产品经理、设计师和开发者制作具有交互性的原…

17.jdk源码阅读之LinkedBlockingQueue

1. 写在前面 LinkedBlockingQueue 是 Java 并发包中的一个重要类&#xff0c;常用于生产者-消费者模式等多线程编程场景。上篇文章我们介绍了ArrayBlockingQueue&#xff0c;并且与LinkedBlockingQueue做了简单的对比&#xff0c;这篇文章我们来详细分析下LinkedBlockingQueue…

RAS--APEI 报错解析流程(2)

RAS--APEI 报错解析流程(1) 除了APEI 中除了GHES会记录错误&#xff0c;在Post过程中的错误通常是通过BERT Table汇报 1.BERT Boot Error Record Table is used to report unhandled errors that occurred in a previous boot&#xff0c;it is reported as a ‘one-time polle…

一文弄懂JVM类加载器与双亲委派机制

类的加载器完成类的加载环节中的装载阶段的工作&#xff08;通过一个类的全限定名来获取该类的二进制字节流&#xff0c;且这个动作在虚拟机**外部实现**&#xff0c;即开发者可以决定如何去获取所需的类&#xff09;&#xff0c;且**不会影响后续的链接和初始化阶段&#xff0…

《算法笔记》总结No.10——链表

从第10期破例插叙一期单链表的实现&#xff0c;这个东东相当重要&#xff01;考研的同学也可以看&#xff1a;相较于王道考研的伪码不太相同&#xff0c;专注于可以运行。如果是笔试中的伪码&#xff0c;意思正确即可~ 注&#xff1a;博主之前写过一个版本的顺序表和单链表的C实…

谷粒商城实战笔记-56~57-商品服务-API-三级分类-修改-拖拽功能完成

文章目录 一&#xff0c;56-商品服务-API-三级分类-修改-拖拽功能完成二&#xff0c;57-商品服务-API-三级分类-修改-批量拖拽效果1&#xff0c;增加按钮2&#xff0c;多次拖拽一次保存完整代码 在构建商品服务API中的三级分类修改功能时&#xff0c;拖拽排序是一个直观且高效的…

Linux:Linux权限

目录 1. Linux权限的概念 2. Linux权限管理 2.1 文件访问者的分类 2.2 文件类型和访问权限 2.2.1 文件类型 2.2.2 基本权限 2.3 文件权限值的表示方法 2.4 文件访问权限的相关设置方法 2.4.1 chmod 2.4.2 chown 2.4.3 chgrp 2.4.4 umask 3. file指令 4. Linux目…

如何学习EMR:糙快猛的大数据之路(建立整体框架)

目录 初学EMREMR是什么&#xff1f;我的EMR学习故事糙快猛学习法则代码示例: 你的第一个EMR任务学习EMR的深入步骤EMR进阶技巧实用资源推荐常见挑战和解决方案 EMR生态EMR生态系统深度探索1. EMR上的Hadoop生态系统2. EMR Studio3. EMR on EKS 高级EMR配置和优化1. EMR实例集策…

音视频入门基础:PCM专题(3)——使用Audacity工具分析PCM音频文件

音视频入门基础&#xff1a;PCM专题系列文章&#xff1a; 音视频入门基础&#xff1a;PCM专题&#xff08;1&#xff09;——使用FFmpeg命令生成PCM音频文件并播放 音视频入门基础&#xff1a;PCM专题&#xff08;2&#xff09;——使用Qt播放PCM音频文件 音视频入门基础&am…