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 报道,美国时间周…...

云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地
借阿里云中企出海大会的东风,以**「云启出海,智联未来|打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办,现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...
Cesium1.95中高性能加载1500个点
一、基本方式: 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...
工程地质软件市场:发展现状、趋势与策略建议
一、引言 在工程建设领域,准确把握地质条件是确保项目顺利推进和安全运营的关键。工程地质软件作为处理、分析、模拟和展示工程地质数据的重要工具,正发挥着日益重要的作用。它凭借强大的数据处理能力、三维建模功能、空间分析工具和可视化展示手段&…...

cf2117E
原题链接:https://codeforces.com/contest/2117/problem/E 题目背景: 给定两个数组a,b,可以执行多次以下操作:选择 i (1 < i < n - 1),并设置 或,也可以在执行上述操作前执行一次删除任意 和 。求…...

跨链模式:多链互操作架构与性能扩展方案
跨链模式:多链互操作架构与性能扩展方案 ——构建下一代区块链互联网的技术基石 一、跨链架构的核心范式演进 1. 分层协议栈:模块化解耦设计 现代跨链系统采用分层协议栈实现灵活扩展(H2Cross架构): 适配层…...
土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等
🔍 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术,可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势,还能有效评价重大生态工程…...
【碎碎念】宝可梦 Mesh GO : 基于MESH网络的口袋妖怪 宝可梦GO游戏自组网系统
目录 游戏说明《宝可梦 Mesh GO》 —— 局域宝可梦探索Pokmon GO 类游戏核心理念应用场景Mesh 特性 宝可梦玩法融合设计游戏构想要素1. 地图探索(基于物理空间 广播范围)2. 野生宝可梦生成与广播3. 对战系统4. 道具与通信5. 延伸玩法 安全性设计 技术选…...
基于matlab策略迭代和值迭代法的动态规划
经典的基于策略迭代和值迭代法的动态规划matlab代码,实现机器人的最优运输 Dynamic-Programming-master/Environment.pdf , 104724 Dynamic-Programming-master/README.md , 506 Dynamic-Programming-master/generalizedPolicyIteration.m , 1970 Dynamic-Programm…...

Mysql中select查询语句的执行过程
目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析(Parser) 2.4、执行sql 1. 预处理(Preprocessor) 2. 查询优化器(Optimizer) 3. 执行器…...

R语言速释制剂QBD解决方案之三
本文是《Quality by Design for ANDAs: An Example for Immediate-Release Dosage Forms》第一个处方的R语言解决方案。 第一个处方研究评估原料药粒径分布、MCC/Lactose比例、崩解剂用量对制剂CQAs的影响。 第二处方研究用于理解颗粒外加硬脂酸镁和滑石粉对片剂质量和可生产…...