Java入门篇 之 继承
本篇碎碎念:最近的课程遇到瓶颈了,看的时候感觉自己会了,但是结束仔细一回顾还是一知半解,一点一点来吧,基础必须要打好(自己给自己好的心里暗示,结局一定是好的)
今日份励志文案:慢慢改变,慢慢成长,慢慢适应,慢慢优秀
冲冲冲!!!!
继承
怎么去设计继承,什么时候会用到继承
继承解决了什么问题???
继承是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加新功能,这样产生新的类叫做派生类(子类)
继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程
继承主要解决的问题是:共性的抽取,实现代码复用。
例如:猫和狗都是动物,我们就可以将共性的内容进行抽取,然后采用继承的思想来达到共用
如果不使用继承,代码变得比较麻烦,看下列代码
代码的简单演示
class Bird{public String name;public int age;public void fly(){System.out.println(this.name+"正在天上飞");}public void print(){System.out.println("这只鸟的名字是:"+this.name+",它已经"+this.age+"岁了");}
}
class Fish{public String name;public int age;public void swim(){System.out.println(this.name+"正在水里游泳");}public void print(){System.out.println("这条鱼的名字是:"+this.name+",它已经"+this.age+"岁了");}
}
public static void main(String[] agrs){Bird bird=new Bird();Fish fish=new Fish();bird.age=1;bird.name="鹦鹉";bird.fly();bird.print();fish.age=2;fish.name="锦鲤";fish.swim();fish.print();}

其中:
public String name;
public int age;
为重复代码
此时就可以使用继承的概念来修改这段代码
class Animal1{public String name;public int age;}
class Bird extends Animal1{public void fly(){System.out.println(this.name+"正在天上飞");}public void print(){System.out.println("这只鸟的名字是:"+this.name+",它已经"+this.age+"岁了");}
}
class Fish extends Animal1{public void swim(){System.out.println(this.name+"正在水里游泳");}public void print(){System.out.println("这条鱼的名字是:"+this.name+",它已经"+this.age+"岁了");}
}
其中extend 是Java语言中的一个关键字
使用方式为:
子类 extends 父类
class A{public int a=1;public int b=2;
}
class B extends A{public int a=10;public int c=3;
public void print1(){System.out.println(a);System.out.println(b);System.out.println(c);}
}


根据就近原则:优先访问子类的,如果子类没有a,就访问父类的
可以根据super关键字去指定告诉编译器,我们访问的父类的a
以上述代码举例,用法是 :System.out.println(super.a);

1.2 super和this的区别是什么?
相同点:
1.都是Java中的关键字
2.只能在类的非静态方法中使用,用来访问非静态成员方法和字段
字段的讲解:字段(也可以称作数据成员)可以是任何类型的对象,可以通过其引用与其进行通信,也可以是基本类型的一种
3.在构造方法中调用时,必须是构造方法中的第一条语句,并且二者不可以同时存在
不同点:
1.this是当前对象的引用,当前对象即调用实例方法的对象,super相当于是子类对象中从父类继承下来部分成员的引用
2.在非静态成员方法中,this用来访问本类的方法和属性,super用来访问父类继承下来的方法和属性
3.在构造方法中:this(...)用于调用本类构造方法,super(...)用于调用父类构造方法,两种调用不能同时在构造方法中出现
4.构造方法中一定会存在super(...)的调用,用户没有写编译器也会增加,但是this(...)用户不写则没有
在子类方法中 或或者 通过子类对象访问成员时:
1.如果访问的成员变量子类中有,优先访问自己的成员变量
2.如果访问的成员变量与父类中成员变量同名,则优先访问自己的
class A{public void fun(){System.out.println("父类中的");}
}
class B extends A {public void fun() {System.out.println("子类中的");}public void test() {fun();}
}//底下是书写main函数中的public static void main(String[] args) {B b=new B();b.test();
}

3.如果访问的成员变量子类中无,则访问父类继承下来的,通过父类有没有定义,则报错
class A {public void fun() {System.out.println("父类中的");}
}
class B extends A {public void test() {fun();}
}

下列代码中:同问fun函数,由于子类中含有参数 a,fun(10)访问的是子类中的 fun
若父类中fun含有参数,同子类一样
class A{public void fun(){System.out.println("父类中的");}
}
class B extends A {public void fun(int a) {System.out.println("子类中的"+a);}public void test() {fun(10);}
}

产生子类对象的时候,父类的成员就要初始化好
class Animal {public String name;public String color;//当没有public Animal //Java会提供一个//所以没有public Animal才不报错,最好还是写上public Animal(String name, String color) {this.name = name;this.color = color;}public void eat() {System.out.println(this.name + "正在吃...");}}class Cat extends Animal {public String character;//可以没有String name, String color//可以在super中体现//传了参数会更灵活public Cat( String color,String name ,String character ) {//调用父类的带有子类的2个参数的构造方法来初始化父类成员super(name,color);this.character=character;}public void print(){System.out.println("这只猫的名字是:"+name+",它的毛是"+color+",它是"+character);}public void barks() {System.out.println(this.name + "正在叫...");}}class Dog extends Animal {public float weight;public Dog(String name, String color, float weight) {super(name, color);this.weight = weight;}public void wangwang() {System.out.println(this.name + "超重了!!!");}
}
public static void main(String[] args) {Cat cat = new Cat("白棕色","布偶猫","可爱的");cat.eat();cat.print();Dog dog = new Dog("边牧犬","白黑色",60);dog.wangwang();}

上述例子,实例化了父类成员,在子类中调用了

上面这个图片是我刚开始写代码时犯的错误:
- cat.name= 是没有括号的,直接写就行
- cat.name 在eat上面调用,要不然就是null(ps:都运行结束了,再赋值,能运行出来才怪)
补:什么是实例化对象?
Java实例化就是使用new关键字创建一个对象的过程
例如:
Animal cat = new Animal
new Animal是以Animal类为模板,在堆空间创建类一个Animal类的对象
( ) 括号代表在对象创建后,立即调用Animal类的构造函数,对刚生成的对象初始化
Animal cat 创建了一个Animal类的引用变量
代码块的运行顺序(具体运行代码会在下一条博客说明)
1、父类静态代码块优先于子类静态代码块执行,且是最早执行
2、父类实例代码块和父类构造方法紧接着执行
3、子类的实例代码块和子类构造方法紧接着再执行
4、第二次实例化子类对象时,父类和子类的静态代码块都将不会再执行(也就是说静态代码块只执行一次)
如果有解释的不对或者不清晰,如果可以从评论区指出,我一定会加以修改,万分感谢
希望对你们有所帮助
相关文章:
Java入门篇 之 继承
本篇碎碎念:最近的课程遇到瓶颈了,看的时候感觉自己会了,但是结束仔细一回顾还是一知半解,一点一点来吧,基础必须要打好(自己给自己好的心里暗示,结局一定是好的) 今日份励志文案:慢慢改变,慢慢…...
如何计算掩膜图中多个封闭图形的面积
import cv2def calMaskArea(image,idx):mask cv2.inRange(image, idx, idx)contours, hierarchy cv2.findContours(mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)for contour in contours:area cv2.contourArea(contour)print("图形的面积为", area) image是…...
【Nginx】CentOS 安装Nignx
CentOS上安装Nginx: 1. 打开终端:使用SSH或者直接在服务器上打开终端。 2. 更新系统:运行以下命令以确保您的系统软件包列表是最新的: sudo yum update3. 安装Nginx:运行以下命令以安装Nginx: sudo yum…...
idea 代码快捷键Mac版
1、查询任何东西 双击 Shift2、文件内查找 Command F 3、文件内替换 Command R4、全局查找(根据路径) Command Shift F5、在当前文件跳转到某一行的指定处 Command L6、退回 / 前进到上一个操作的地方 Command Option 方向键左Command Opt…...
【NI-DAQmx入门】多通道数据采集
1.通道扩展解释 通道扩展是扩展数据采集设备的通道以包含另一个设备的通道的过程,从而有效地创建具有更多通道的任务。当使用通道扩展时,DAQmx 自动在 DAQmx 驱动程序级别路由触发器和时钟,以便多个设备同步。为了使设备作为一个整体运行&…...
回顾 — SFA:简化快速 AlexNet(模糊分类)
模糊图像的样本 一、说明 在本文回顾了基于深度学习的模糊图像分类(SFA)。在本文中:Simplified-Fast-AlexNet (SFA)旨在对图像是否因散焦模糊、高斯模糊、雾霾模糊或运动模糊而模糊进行分类。 二、大纲 图像模糊建模简要概述简化快速 AlexNet…...
基于51单片机PCF8591数字电压表数码管显示设计( proteus仿真+程序+设计报告+讲解视频)
PCF8591数字电压表数码管显示 1.主要功能:讲解视频:2.仿真3. 程序代码4. 设计报告5. 设计资料内容清单&&下载链接资料下载链接(可点击): 基于51单片机PCF8591数字电压表数码管设计( proteus仿真程序设计报告讲…...
分发饼干(贪心算法+图解)
455. 分发饼干 - 力扣(LeetCode) 题目描述 假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。 对每个孩子 i,都有一个胃口值 g[i],这是能让孩子们满足胃口的饼干的最…...
vue项目路由使用history模式,nginx配置,刷新页面显示404
需要在配置项中添加 try_files $uri $uri/ /index.html;...
redis的redis.service配置
在CentOS中,可以使用以下步骤配置redis.service: 创建redis用户和组 在终端中执行以下命令: 复制插入 sudo useradd -r -s /bin/false redis复制插入 这将创建一个名为redis的系统用户,并禁止该用户登录系统。 安装Redis 在…...
高频SQL50题(基础版)-3
文章目录 主要内容一.SQL练习题1.1174-即时食物配送代码如下(示例): 2.550-游戏玩法分析代码如下(示例): 3.2356-每位教师所教授的科目种类的数量代码如下(示例): 4.1141-查询近30天活跃用户数代码如下&…...
OpenMMlab导出yolov3模型并用onnxruntime和tensorrt推理
导出onnx文件 直接使用脚本 import torch from mmdet.apis import init_detector, inference_detectorconfig_file ./configs/yolo/yolov3_mobilenetv2_8xb24-ms-416-300e_coco.py checkpoint_file yolov3_mobilenetv2_mstrain-416_300e_coco_20210718_010823-f68a07b3.pth…...
单链表的插入删除
#include <iostream>#include <stdio.h> #include <stdlib.h>using namespace std;//带头指针的单链表typedef struct LNode{int data;struct LNode *next;}LNode, *LinkList;bool InitList(LinkList &L){L (LNode *) malloc(sizeof(LNode));if(L NUL…...
github使用手册
核心代码 配置用户名/邮箱 best practice git init #在本地初始化一个仓库 git add . #将当前目录所有的文件加入(注意这里是加入)到缓存区 git commit -m "xxx" #将当前缓存区里的内容提交到本地仓库 git remote add <remote_rep_name&g…...
怎样做ChatGPT应用开发?
要开发一个基于ChatGPT的应用,你可以按照以下步骤进行: 步骤1:了解ChatGPT API ChatGPT的使用通常通过API进行。你需要了解ChatGPT的API文档,包括如何进行请求、API端点、身份验证等信息。在开发之前,确保你已经获取了…...
漏洞-任意账号注册
一漏洞介绍 1.未验证邮箱/手机号 情景:应用为了方便用户记录用户名,使用邮箱和手机号作为用户名(因此很多应用在注册的时候就要求用户填写,多数时候都会给用户发送激活信息,激活后才能登录) 缺陷ÿ…...
一个关于jdbc操作mysql和java基础练手的通讯录管理系统小项目
首先 : 整个项目的项目结构为 : 1.第一步先导入数据库的驱动,我的mysql数据库是8.0以上版本,然后导入的驱动就是8.0.16版本的jar包; 1.JdbcBase : JDBC基础操作封装成了JdbcBase类,在里面先静态定义了数据库连接对象和DQL查询结果&#x…...
C++用条件变量实现线程安全的queue容器
#include <queue> #include <memory> #include <mutex> #include <condition_variable> template<typename T> class threadsafe_queue { private:mutable std::mutex mut; // 1 互斥量必须是可变的 std::queue<T> data_queue;std::condi…...
EDA实验-----3-8译码器设计(QuartusII)
目录 一. 实验目的 二. 实验仪器 三. 实验原理及内容 1.实验原理 2.实验内容 四.实验步骤 五. 实验报告 六. 注意事项 七. 实验过程 1.创建Verilog文件,写代码 编辑 2.波形仿真 3.连接电路图 4.烧录操作 一. 实验目的 学会Verilog HDL的…...
NFTScan | 11.06~11.12 NFT 市场热点汇总
欢迎来到由 NFT 基础设施 NFTScan 出品的 NFT 生态热点事件每周汇总。 周期:2023.11.06~ 2023.11.12 NFT Hot News 01/ 《辛普森一家》提及 NFT 及区块链,相关 NFT 地板价涨至 0.35 ETH 11 月 6 日,据 Coindesk 报道,美国时间周…...
docker详细操作--未完待续
docker介绍 docker官网: Docker:加速容器应用程序开发 harbor官网:Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台,用于将应用程序及其依赖项(如库、运行时环…...
深入理解JavaScript设计模式之单例模式
目录 什么是单例模式为什么需要单例模式常见应用场景包括 单例模式实现透明单例模式实现不透明单例模式用代理实现单例模式javaScript中的单例模式使用命名空间使用闭包封装私有变量 惰性单例通用的惰性单例 结语 什么是单例模式 单例模式(Singleton Pattern&#…...
抖音增长新引擎:品融电商,一站式全案代运营领跑者
抖音增长新引擎:品融电商,一站式全案代运营领跑者 在抖音这个日活超7亿的流量汪洋中,品牌如何破浪前行?自建团队成本高、效果难控;碎片化运营又难成合力——这正是许多企业面临的增长困局。品融电商以「抖音全案代运营…...
【项目实战】通过多模态+LangGraph实现PPT生成助手
PPT自动生成系统 基于LangGraph的PPT自动生成系统,可以将Markdown文档自动转换为PPT演示文稿。 功能特点 Markdown解析:自动解析Markdown文档结构PPT模板分析:分析PPT模板的布局和风格智能布局决策:匹配内容与合适的PPT布局自动…...
LLM基础1_语言模型如何处理文本
基于GitHub项目:https://github.com/datawhalechina/llms-from-scratch-cn 工具介绍 tiktoken:OpenAI开发的专业"分词器" torch:Facebook开发的强力计算引擎,相当于超级计算器 理解词嵌入:给词语画"…...
Redis数据倾斜问题解决
Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中,部分节点存储的数据量或访问量远高于其他节点,导致这些节点负载过高,影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...
Docker 本地安装 mysql 数据库
Docker: Accelerated Container Application Development 下载对应操作系统版本的 docker ;并安装。 基础操作不再赘述。 打开 macOS 终端,开始 docker 安装mysql之旅 第一步 docker search mysql 》〉docker search mysql NAME DE…...
高考志愿填报管理系统---开发介绍
高考志愿填报管理系统是一款专为教育机构、学校和教师设计的学生信息管理和志愿填报辅助平台。系统基于Django框架开发,采用现代化的Web技术,为教育工作者提供高效、安全、便捷的学生管理解决方案。 ## 📋 系统概述 ### 🎯 系统定…...
QT开发技术【ffmpeg + QAudioOutput】音乐播放器
一、 介绍 使用ffmpeg 4.2.2 在数字化浪潮席卷全球的当下,音视频内容犹如璀璨繁星,点亮了人们的生活与工作。从短视频平台上令人捧腹的搞笑视频,到在线课堂中知识渊博的专家授课,再到影视平台上扣人心弦的高清大片,音…...
AxureRP-Pro-Beta-Setup_114413.exe (6.0.0.2887)
Name:3ddown Serial:FiCGEezgdGoYILo8U/2MFyCWj0jZoJc/sziRRj2/ENvtEq7w1RH97k5MWctqVHA 注册用户名:Axure 序列号:8t3Yk/zu4cX601/seX6wBZgYRVj/lkC2PICCdO4sFKCCLx8mcCnccoylVb40lP...

