【Java探索之旅】继承概念_语法_父类的成员访问

文章目录

  • 📑前言
  • 一、继承
    • 1.1 继承的概念
    • 1.2 继承语法
    • 1.3 继承发生后
  • 二、父类的访问
    • 2.1 父类成员变量访问
    • 2.2 父类成员方法访问
  • 🌤️全篇总结

📑前言

在面向对象编程中,继承是一种重要的概念,它允许我们创建一个类(子类)来拥有另一个类(父类)的属性和方法。通过继承,我们可以实现代码的重用和扩展,提高代码的可维护性和灵活性。本文将深入探讨Java中继承的概念、语法以及父类成员的访问规则,帮助您更好地理解继承的作用和应用。

一、继承

Java中的继承和现实生活中的继承遗产……这种有那么一点相似,但又大不相同,往下看让你真正了解继承的含义和作用。

1.1 继承的概念

在面向对象思想中提出了继承的概念,其目的是专门用来进行共性抽取,从而实现代码的复用,省去许多的重复。

继承的机制

是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加新功能,这样产生新的类,称派生类(子类)。继承呈现了面向对象程序设计的层次结构, 体现了由简单到复杂的认知过程。继承主要解决的问题是:共性抽取,代码复用。

1.2 继承语法

在Java中如果要表示类之间的继承关系,需要借助extends关键字

修饰符 class 子类 extends 父类 {
        // ...
}

下面用两段代码让大家更好的了解继承的作用

//这是两个类的实现,其中有大量的重复性代码,非常的冗余
class Dog{
    String name;
    int age;
    public Dog(String name,int age){
        this.name = name;
        this.age = age;
    }
    public void eat(){
        System.out.println(name+"在吃狗粮");
    }
    public void sleep(){
        System.out.println(name+"在睡觉");
    }
    public void bark(){
        System.out.println("汪汪叫");
    }
}
class Cat{
    String name;
    int age;
    public Cat(String name,int age){
        this.name = name;
        this.age = age;
    }
    public void eat(){
        System.out.println(name+"在吃猫粮");
    }
    public void sleep(){
        System.out.println(name+"在睡觉");
    }
    public void bark(){
        System.out.println("喵喵叫");
    }
}
 
public class Exercise {
    public static void main(String[] args) {
       Dog dog = new Dog("小七",7);
       Cat cat = new Cat("咪咪",3);
       dog.eat();
       dog.sleep();
       dog.bark();
       cat.eat();
       cat.sleep();
       cat.bark();
    }
}
//对共性进行抽取,后续只需要继承便可使用父类中的代码
class Animal{
    String name;
    int age;
    public Animal(String name,int age){
        this.name = name;
        this.age = age;
    }
    public void eat(){
        System.out.println(name+"在睡觉");
    }
    public void sleep(){
        System.out.println(name+"在吃饭");
    }
}
class Dog extends Animal{
    public Dog(String name,int age){
        super(name,age);
    }
    public void bark(){
        System.out.println("汪汪叫");
    }
}
class Cat extends Animal{
    public Cat(String name,int age){
        super(name,age);
    }
    public void bark(){
        System.out.println("喵喵叫");
    }
}
public class Exercise2 {
    public static void main(String[] args) {
        Dog dog = new Dog("小七",7);
        Cat cat = new Cat("秘密",3);
        dog.eat();
        dog.sleep();
        dog.bark();
        cat.eat();
        cat.sleep();
        cat.bark();
    }
}

1.3 继承发生后

  • 子类会将父类中的成员变量或者成员方法继承到子类中了
  • 子类继承父类之后,要新添加自己特有的成员,体现出与基类的不同,否则就没有必要继承了

上述图示中,Dog和Cat都继承了Animal类,其中:Animal类称为父类/基类或超类,Dog和Cat可以称为Animal的子类/派生类,继承之后,子类可以复用父类中成员,子类在实现时只需关心自己新增加的成员。

继承最大的作用就是:实现代码复用,还有就是来实现多态

二、父类的访问

在继承体系中,子类将父类中的方法和字段继承下来了,现在我们要探讨的是能否在子类中直接访问父类的成员。

2.1 父类成员变量访问

class Bass{
    int a;
    int c;
}
class Clss extends Bass{
    int a;
    int b;
    public void cs(){
        a = 10;//访问子类自己
        b = 20;//访问子类自己
        c = 30;//访问父类
        d = 40;//编译报错
    }
}
  • 如果访问的成员变量子类中有,优先访问自己的成员变量。
  • 如果访问的成员变量子类中无,则访问父类继承下来的,如果父类也没有定义,则编译报错。
  • 如果访问的成员变量与父类中成员变量同名,则优先访问自己的

成员变量访问遵循就近原则,自己有优先自己的,如果没有则向父类中找

2.2 父类成员方法访问

class Bass{
    public void add(){
        System.out.println("加法");
    }
    public void man(){
        System.out.println("硬汉");
    }
}
class Clss extends Bass{
    public void max(){
        System.out.println("最大值");
    }
    public void add(){
        System.out.println("clss");
    }
    public void cs2(){
        add();//访问子类自己
        man();//访问父类
        max();//访问子类自己
        mid();//编译报错
    }
}

成员方法没有同名时,在子类方法中或者通过子类对象访问方法时,则优先访问自己的,自己没有时再到父类中找,如果父类中也没有则报错。

通过子类对象访问父类与子类中不同名方法时,优先在子类中找,找到则访问,否则在父类中找,找到则访问,否则编译报错。

通过派生类对象访问父类与子类同名方法时,如果父类和子类同名方法的参数列表不同(重载),根据调用方法适传递的参数选择合适的方法访问,如果没有则报错。

🌤️全篇总结

通过本篇所述,您已经了解了Java中继承的概念、语法以及父类成员的访问规则。继承是面向对象编程中的重要概念,通过继承可以实现代码的复用和扩展,提高代码的可维护性和灵活性。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

[go-zero] 简单微服务调用

文章目录 1.注意事项2.服务划分及创建2.1 用户微服务2.2 订单微服务 3.启动服务3.1 etcd 服务启动3.2 微服务启动3.3 测试访问 1.注意事项 go-zero微服务的注册中心默认使用的是Etcd。 本小节将以一个订单服务调用用户服务来简单演示一下,其实订单服务是api服务&a…

VSCode设置好看清晰的字体!中文用鸿蒙,英文用Jetbrains Mono

一、中文字体——HarmonyOS Sans SC 1、下载字体 官网地址:https://developer.huawei.com/consumer/cn/design/resource/ 直接下载:https://communityfile-drcn.op.dbankcloud.cn/FileServer/getFile/cmtyPub/011/111/111/0000000000011111111.20230517…

昇思25天学习打卡营第18天 | K近邻算法实现红酒聚类

1、实验目的 了解KNN的基本概念;了解如何使用MindSpore进行KNN实验。 2、K近邻算法原理介绍 K近邻算法(K-Nearest-Neighbor, KNN)是一种用于分类和回归的非参数统计方法,最初由 Cover和Hart于1968年提出(Cover等人,1967)&#…

Golang | Leetcode Golang题解之第220题存在重复元素III

题目: 题解: func getID(x, w int) int {if x > 0 {return x / w}return (x1)/w - 1 }func containsNearbyAlmostDuplicate(nums []int, k, t int) bool {mp : map[int]int{}for i, x : range nums {id : getID(x, t1)if _, has : mp[id]; has {retu…

ctfshow web sql注入 web242--web249

web242 into outfile 的使用 SELECT ... INTO OUTFILE file_name[CHARACTER SET charset_name][export_options]export_options:[{FIELDS | COLUMNS}[TERMINATED BY string]//分隔符[[OPTIONALLY] ENCLOSED BY char][ESCAPED BY char]][LINES[STARTING BY string][TERMINATED…

【三级等保】等保整体建设方案(Word原件)

建设要点目录: 1、系统定级与安全域 2、实施方案设计 3、安全防护体系建设规划 软件全文档,全方案获取方式:本文末个人名片直接获取。

数据结构——二叉树相关题目

1.寻找二叉树中数值为x的节点 //寻找二叉树中数值为x的节点 BTNode* TreeFind(BTNode* root, BTDataType x)//传过来二叉树的地址和根的地址,以及需要查找的数据 {if (root Null){return Null;}//首先需要先判断这个树是否为空,如果为空直接返回空if (…

基于python的数据分解-趋势-季节性-波动变化

系列文章目录 前言 时间序列数据的分解,一般分为趋势项,季节变化项和随机波动项。可以基于加法或者乘法模型。季节变化呈现出周期变化,因此也叫季节效应(周期)。 一、数据分解步骤 (1)估计时间序列的长期…

拓扑排序,PageRank(markov),实对称矩阵等

拓扑排序 多件事情有先后顺序,如何判断哪个先哪个后 拓扑排序算法: 1.读入图时,需要记录每个顶点的入度,以及相邻的所有顶点 2.将入度为0的顶点入队(先进先出) 3.取出队首元素a,&#xf…

rocketmq-console可视化界面功能说明

rocketmq-console可视化界面功能说明 登录界面OPS(运维)Dashboard(驾驶舱)Cluster(集群)Topic(主题)Consumer(消费者)Producer(生产者)Message(消息)MessageTrace(消息轨迹) rocketmq-console是rocketmq的一款可视化工具,提供了mq的使用详情等功能。 本章针对于rock…

基于springboot+vue+uniapp的高校宿舍信息管理系统小程序

开发语言:Java框架:springbootuniappJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包&#…

springboot + mybatis 多数据源切换

参考的b站博主写的 配置文件: spring:datasource:db1:jdbc-url: jdbc:mysql://localhost:3306/interview_database?useUnicodetrue&characterEncodingutf-8&useSSLfalseusername: rootpassword: 12345driver-class-name: com.mysql.cj.jdbc.Driverdb2:jdbc-url: jdbc…

rancher管理多个集群

一、rancher部署 单独部署到一台机器上,及独立于k8s集群之外: 删除所有yum源,重新建yum源: # 建centos7.9的yum源 # cat CentOS-Base.repo # CentOS-Base.repo # # The mirror system uses the connecting IP address of the …

花所Flower非小号排名20名下载花所Flower

1、Flower花所介绍 Flower花所是一家新兴的数字货币交易平台,致力于为全球用户提供安全、便捷的交易体验。平台以其强大的技术支持和丰富的交易产品闻名,为用户提供多样化的数字资产交易服务,涵盖了主流和新兴数字货币的交易需求。 2. Flowe…

wordpress企业网站模板免费下载

大气上档次的wordpress企业模板,可以直接免费下载,连注册都不需要,网盘就可以直接下载,是不是嘎嘎给力呢 演示 https://www.jianzhanpress.com/?p5857 下载 链接: https://pan.baidu.com/s/1et7uMYd6--NJEWx-srMG1Q 提取码:…

【Python】已解决:nltk.download(‘stopwords‘) 报错问题

文章目录 一、分析问题背景二、可能出错的原因三、错误代码示例四、正确代码示例五、注意事项 已解决:nltk.download(‘stopwords’) 报错问题 一、分析问题背景 在使用Python的自然语言处理库NLTK(Natural Language Toolkit)时&#xff0c…

《向量数据库指南》——Milvus Cloud检索器增强的深度探讨:句子窗口检索与元数据过滤

检索器增强的深度探讨:句子窗口检索与元数据过滤 在信息爆炸的时代,高效的检索系统成为了连接用户与海量数据的关键桥梁。为了进一步提升检索的准确性和用户满意度,检索器增强技术应运而生,其中句子窗口检索与元数据过滤作为两大…

每日一题~oj(贪心)

对于位置 i来说,如果 不选她,那她的贡献是 vali-1 *2,如果选他 ,那么她的贡献是 ai. 每一个数的贡献 是基于前一个数的贡献 来计算的。只要保证这个数的前一个数的贡献是最优的,那么以此类推下去,整体的val…

基于自编码器的时间序列异常检测方法(以传感器数据为例,MATLAB R2021b)

尽管近年来研究者对自编码器及其改进算法进行了深入研究,但现阶段仍存在以下问题亟须解决。 1) 无监督学习模式对特征提取能力的限制与有监督学习相比,无监督学习模式摆脱了对样本标签的依赖、避免了人工标注的困难,但也因此失去了样本标签的…

vue3+vite搭建第一个cesium项目详细步骤及环境配置(附源码)

文章目录 1.创建vuevite项目2.安装 Cesium2.1 安装cesium2.2 安装vite-plugin-cesium插件(非必选)2.3 新建组件页面map.vue2.4 加载地图 3.完成效果图 1.创建vuevite项目 打开cmd窗口执行以下命令:cesium-vue-app是你的项目名称 npm create…