10.Java面向对象----继承

news2025/6/16 17:52:21

Java面向对象—继承

面向对象简称 OO(Object Oriented),20 世纪 80 年代以后,有了面向对象分析(OOA)、 面向对象设计(OOD)、面向对象程序设计(OOP)等新的系统开发方式模型的研究。对 Java 语言来说,一切皆是对象。把现实世界中的对象抽象地体现在编程世界中,一个对象代表了某个具体的操作。一个个对象最终组成了完整的程序设计,这些对象可以是独立存在的,也可以是从别的对象继承过来的。对象之间通过相互作用传递信息,实现程序开发。
面向对象的三大核心特性:

  • 封装性
  • 继承性
  • 多态性

今天我们重点来讲解Java面向对象的第二个特性:继承性。

一、继承的定义

继承是面向对象最显著的一个特性。继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力。继承是类与类之间的关系,是一个很简单很直观的概念,与现实世界中的继承(例如儿子继承父亲财产)类似。继承可以理解为一个类从另一个类获取方法和属性的过程。如果类B继承于类A,那么B就拥有A的方法和属性。

二、继承的实现

继承使用 extends 关键字。
我们先定义一个人类的类,人类的类记录了人类的基本信息。

/**
 * 人类
 * @author Aires
 *
 */
public class Human {

	private String name;//姓名
	
	private int age;//年龄
	
	private char sex;//性别
	
	public Human() {}//人类无参构造方法

	public Human(String name, int age, char sex) {//人类有参构造方法
		super();
		this.name = name;
		this.age = age;
		this.sex = sex;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	public char getSex() {
		return sex;
	}

	public void setSex(char sex) {
		this.sex = sex;
	}
}

我们再定义一个程序员类

/**
 * 程序人员
 * @author Aires
 *
 */
public class Programmer {

	private String language;//使用语言
	
	public Programmer() {}
	public Programmer(String language) {
		this.language = language;
	}

	public String getLanguage() {
		return language;
	}

	public void setLanguage(String language) {
		this.language = language;
	}
}

通过分析,我们可以知道程序员也是人类的一员,那么我们就让程序员类继承人类

public class Programmer extends Human

同时,我们在程序员的构造方法中就可以为人类的属性进行赋值

	public Programmer(String name, int age, char sex,String language) {
		super(name, age, sex);
		this.language = language;
	}

那么我们实例化程序员对象,看看结果

Programmer programmer=new Programmer("James Gosling", 67, '男', "Java");
		System.out.println(programmer.getName()+",今年"+programmer.getAge()+","+programmer.getSex()+"性,使用"+programmer.getLanguage()+"开发程序!");


在这里插入图片描述

三、继承的限制

  • Java之中使用extends关键字实现继承
  • Java之中只允许多层继承,不允许多重继承,Java存在单继承局限
  • Java之中,子类可以继承父类除private以为的所有的成员
  • 构造方法不能被继承
  • 子类使用父类成员时,使用super关键字,使用本类成员使用this关键字

四、super关键字

Super关键字,可以用来子类调用父类的成员用,它包括调用父类的public、protected修饰的变量方法。
注意事项:

  • 调用父类的方法:super.父类的方法
  • 同时super也可以调用父类的构造方法,但是父类中构造方法用private修饰时,不能有子类去继承
  • 子类可以没有构造方法,他会自动调用父类的构造方法
  • 在子类中可以调用父类的构造方法,super必须放在子类构造方法的首句

五、方法的重载(Overload)与重写(Override)

**方法的重载:**一个类中有多个具有相同名称但参数不同的方法,则称为方法重载。如果只需要执行一个操作,具有相同的方法名称将增加程序的可读性。

**方法的重写:**方法重写基于继承,子类继承父类,子类可以调用父类的方法,同时子类也可以重写父类中的方法,来实现和父类中不同的业务处理逻辑。重写要求子类中方法与父类中的方法名称相同,参数相同,参数类型相同。当子类调用该方法时,基类中的方法则被覆盖。方法重写即:重写父类方法,同名也同参。例如:

人类可以说话

public class Human{
	
	public void speak() {
		System.out.println("人类可以说话!");
	}
}

程序员可以说话,还可以使用计算机说话

public class Programmer extends Human{
		
		public void speak() {
			System.out.println("程序员可以说话!也可以使用计算机说话");
		}
}

结果是

		Human human=new Human();
		human.speak();
		Programmer programmer=new Programmer();
		programmer.speak();

在这里插入图片描述

六、final关键字

Java语言中,final关键字有多种用途,其主题都表示“不可变”,但背后的具体内容并不一样。当final关键字用于修饰类时表示该类不允许被继承;当它用于修饰方法时表示该方法在继承该类的子类中不允许被重写。 当final关键字用于修饰变量时表示该变量的值不可变;静态变量、实例成员变量、形式参数和局部变量都可以被final修饰。

final关键字修饰类
当用final关键字修饰一个类时,表明这个类不能被继承。也就是说,如果一个类你永远不会让他被继承,就可以用final进行修饰。final类中的成员变量可以根据需要设为final,但是要注意final类中的所有成员方法都会被隐式地指定为final方法。

public final class FinalDome {

}
public class FinalTest extends FinalDome{

}

在这里插入图片描述
Ps:在使用final修饰类的时候,要注意谨慎选择,除非这个类真的在以后不会用来继承或者出于安全的考虑,尽量不要将类设计为final类。
final关键字修饰方法
当用final关键字修饰一个方法时,表明这个方法不能被重写,但是这个方法可以被重载。也就是说我们使用final关键字修饰一个方法时,相当于给这个方法上了一把锁。

public class FinalDome {
	
	public final void say() {
		System.out.println("我是终态方法,不能被重写");
	}

	public final void say(int i) {
		System.out.println("我是终态方法,不能被重写,但可以被重载");
	}
}

public class FinalTest extends FinalDome{

	public final void say() {
		System.out.println("我是终态方法,不能被重写");
	}

	public final void say(int i) {
		System.out.println("我是终态方法,不能被重写,但可以被重载");
	}
}

在这里插入图片描述
Ps:只有在想明确禁止该方法在子类中被重写的情况下才将方法设置为final的。父类中的private方法会隐式地被指定为final方法。

final关键字修饰变量
当用final关键字修饰一个变量时,则表明该变量的值无法被更改。

  • final修饰基本类型变量:因基本数据类型的值与真实的值是同一个,所以该变量的值不能改变,即不能重新赋值,是“编译时常量”(compile-time
    constant)
  • final修饰引用类型:因引用数据类型的值表示引用地址,真实的值为实际内容,所以该变量的引用地址不能改变,而引用地址里的存储内容可以变,是“运行时不变量”(runtime immutable variable)

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

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

相关文章

2023 Java 面试题之MyBatis篇

持续更新内容涵盖:Java、MyBatis、ZooKeeper、Dubbo、Elasticsearch、Memcached、Redis、MySQL、Spring、Spring Boot、Spring Cloud、RabbitMQ、Kafka、 Linux 等技术栈(滴滴滴.会持续更新哦,记得点赞、关注、分享三连击哈). My…

NumPy 秘籍中文第二版:十、Scikits 的乐趣

原文:NumPy Cookbook - Second Edition 协议:CC BY-NC-SA 4.0 译者:飞龙 在本章中,我们将介绍以下秘籍: 安装 scikit-learn加载示例数据集用 scikit-learn 对道琼斯股票进行聚类安装 Statsmodels使用 Statsmodels 执行…

【linux】——引导过程与服务控制

文章目录1.linux操作系统引导过程1.1 引导过程总览1.2 linux操作系统的引导过程1.3 系统初始化进程1.4 Systemd单元类型1.5 运行级别所对应的systemd目标2.排除启动类故障2.1 修复MBR扇区故障2.2 实例:修复MBR扇区故障2.2 修复GRUB引导故障2.3 实例:恢复…

电子数据取证(一)

电子数据取证概述 一,什么是电子数据 电子数据的特点 **1、以数字化形式存在。**所有的电子数据都是基于计算机应用和通信等电子化技术手段形成的,用以表示文字、图形符号、数字、字母等信息的资料。与其他证据种类不同,电子数据在本质上而…

Perpetuumsoft OLAP ModelKit .NET CRACK

关于 OLAP ModelKit 专业版 可视化您的数据透视表数据。OLAP ModelKit 是用 C# 编写的 .NET 多功能 OLAP 组件,仅包含 100% 托管代码。它具有 XP 主题外观和使用任何 .NET 数据源(ADO.NET 和 IList)的能力。通过在任何第三方组件(…

java 面试消息题1-13

1. Redis 线程模型, 及为什么redis 这么快? 1.Redis虽然是一条一条处理命令的(单线程),但是redis把每一条命令分成了很多个小命令,对这些小命令是多线程执行的。 2. IO 多路复用 - 可以用别人用过的IO。 …

RK3568平台开发系列讲解(调试篇)Oops 日志分析

🚀返回专栏总目录 文章目录 一、OOPS 日志分析二、OOPS 上的跟踪转储三、使用 objdump 识别内核模块中的错误代码行沉淀、分享、成长,让自己和他人都能有所收获!😄 📢编写代码并不总是内核开发中最难的方面。 调试是真正的瓶颈,即使对于经验丰富的内核开发人员也是如此…

Java同学入职环境安装全讲解

一、简述 最近入职一家新公司,拿到新电脑,那肯定有绕不开的装开发环境流程。下面我就从安装jdk、maven、git、idea四个方面讲解(主要提供各个软件官方的下载网址,因为百度搜出来的东西大家懂的都懂我就不多说了)。如果…

windows下安装虚拟环境保存在C盘之解决方案

正常在研究深度学习算法模型时,会现去创建一个配置软件包的虚拟环境,在windows下,一般新建的虚拟环境保存在Anaconda的安装目录下,比如我的安装目录是在 D:\program\Anaconda3\,然后虚拟环境将安装在anaconda中的envs文件夹中&…

钉钉机器人单聊实现互动卡片推送

钉钉开发机器人单聊业务实现背景钉钉待办钉钉卡片卡片类型的工作通知创建并投放卡片机器人发送互动卡片实现过程搭建1. 授权2. 创建机器人3. 创建卡片变量创建链接问题4. 卡片投放测试5. web端调用机器人发送卡片接口6. 生成待办并封装接口新发现总结背景 特定业务场景下的对具…

Spark对正常日志文件清洗并分析

目录 日志文件准备: 一.日志数据清洗: 第一步:数据清洗需求分析: 二.代码实现 2.1 代码和其详解 2.2创建jdbcUtils来连接Mysql数据库 2.3 运行后结果展示: 三、留存用户分析 3.1需求概览 3.2.代码实现 3…

港科夜闻|香港科大(广州)副校长吴宏伟教授与150余位高教界人士分享两会期间见闻及体会...

关注并星标每周阅读港科夜闻建立新视野 开启新思维1、香港科大(广州)副校长吴宏伟教授与150余位高教界人士分享两会期间见闻及体会。港专学院及香港高等教育评议会合办“港区高等教育界全国政协委员2023全国两会见闻分享”活动。吴宏伟教授在会上发言表示,全国两会令…

Apple Xcode 14.3 (14E222b) 正式版发布下载

Command Line Tools for Xcode 14, tvOS 16 & watchOS 9 Simulator Runtime 请访问原文链接:https://sysin.org/blog/apple-xcode-14/,查看最新版。原创作品,转载请保留出处。 作者主页:sysin.org Xcode 14 包含了在所有 Ap…

上海亚商投顾:沪指震荡反弹 游戏、传媒概念股再度大涨

上海亚商投顾前言:无惧大盘涨跌,解密龙虎榜资金,跟踪一线游资和机构资金动向,识别短期热点和强势个股。 市场情绪大小指数今日走势分化,沪指向上震荡反弹,创业板指一度跌近1%,黄白二线大幅背离。…

强大到让人无法想象的ChatGPT-5即将发布,上千名人士却紧急叫停

目录 【ChatGPT 5简介】 【ChatGPT 5的潜在应用】 【ChatGPT 5的潜在危险】 ChatGPT4还没有好好体验,比GPT4强大1000倍的ChatGPT5又即将发布!届时将彻底改变人工智能领域,并改变我们现有的世界 【ChatGPT 5简介】 OpenAI计划在2023年12月发…

接入丰桥,下单到打印面单到配送开发流程

顺丰开放平台地址:顺丰开放平台 一、了解官网 1.1、开发文档 开发接口之前可以先查看熟悉文档,尤其是API文档仔细阅读。进入之后是如下图,根据自己需要开发的接口,先查看文档,然后根据文档要求来请求并处理响应。 1.2…

在 Linux 上使用 Pigz 更快地压缩文件,真的快!

Pigz是一款快速压缩文件的工具,它能够使用多个CPU核心进行压缩,使得压缩速度得到了极大的提升。在本文中,我们将介绍如何在Linux上使用Pigz来更快地压缩文件。 安装Pigz 在开始使用Pigz之前,我们需要先安装它。在大多数Linux发行…

11. unity 物理系统和碰撞检测+射击游戏案例

1. 物理系统 也就是在游戏场景中添加日常的重力,碰撞等到物理属性 1.1 刚体组件(Rigidbody) 给模型添加刚体组件后,模型会具备一些物理属性,比如重力,速度,加速度等,在属性窗口中…

CSS基础知识点-01

【01】标准CSS盒模型和IE盒模型的区别 盒模型的区别在于设置width和height时,所对应的范围不同。标准盒模型宽高属性的范围只包含content,而IE盒模型的宽高属性范围包含了border、padding和content。 一般来说,我们可以通过修改元素的box-siz…

AcWing 245. 你能回答这些问题吗(线段树)

AcWing 245. 你能回答这些问题吗(线段树)一、题目二、分析1、节点定义2、函数分析(1)pushup函数(2)build函数(3)modify函数(4)query函数三、代码一、题目 Ac…