java学习记录day7

news2024/12/27 4:00:29

类与对象

对象数组与管理

对象数组就是数组里的每个元素都是对象:House[] home = new House[10];使用对象数组实现多个House的管理。
拓展:数组的扩充:

  1. 扩充原来数组的一半:
public void add(House[] home){
	int newLen = home.length*3/2+1;
	home = Arrays.copyof(home,newLen);
}
  1. 扩充原来数组的一倍:
public void add(House[] home){
	int newLen = home.length*2;
	home = Arrays.copyof(home,newLen);
}

类的继承

继承是从已有的类创建新类的过程。
1、继承是面向对象三大特征之一;
2、被继承的类成为父类(超类),继承父类的类的类成为子类(派生类);
3、继承是指一个对象直接使用另一对象的属性和方法;
4、通过继承可以实现代码重用;
在这里插入图片描述
继承的限制:
1、子类会拥有父类的属性和方法,构造方法不能被继承,私有的方法不能继承;
2、继承关系是单继承,不能多重继承,子类不能继承多个父类,但父类可以有多个子类,可以通过类的层级关系,间接实现多继承;
3、构造方法不能被继承可以通过super()来调用,但只能在子类构造方法中的第一句;
4、当父类中没有无参构造方法时,子类必须显示调用父类的带参构造方法;

public class Test{
	public static void main(String[] args) {
		Dog dog = new SingleDog();
		dog.Smile();
		dog.eat();
	}
}
class Dog{
	private String sex;//想要获取这个属性,可以写get方法
	protected String name;//protected:自身,子类及同一个包中类可以访问。
	public void Dog(String name ,String sex){
		this.name = name;
		this.sex = sex;
		System.out.println("父类构造方法");
	}
	public void eat(){
		System.out.println("富婆,饿饿,饭饭");
	}
	public void getName(String name){
		this.name = name;
	}
}
class  SingleDog extends Dog{
	public void SingleDog(){
		super("帅哥","男");
		System.out.println("子类类构造方法");
	}
	public static void Smile(){
		System.out.println("哈哈,被骗了,我是一个人");
	}
}
class HomeDog extends Dog{
	public void SingleDog(){
		super("大黄","母");
		System.out.println("子类类构造方法");
	}
	public static void Smile(){
		System.out.println(name + "汪汪!");
	}
}

//代码未测试,可能有错误,有兴趣的可在评论区告诉我,一起学习

方法重写与super

方法重写

子类虽然可以继承父类的方法,但有的时候子类的方法与非类不尽相同,这时候就需要使用方法重写。
重写时一般都会在定义方法的上一行写上:@Override,这是注解,理解成标签,表示修饰的方法是重写的父类的方法。
方法重写有完全重写和部分重写,完全重写就是在子类中,重新定义一个和父类名称一样的函数,并且在该函数中执行的功能和父类完全不同;部分重写是在子类函数中,重新定义一个和父类函数名称意义的函数,在重写函数中调用了父类的函数,先执行了父类中原有的功能,然后在该函数中添加额外功能的代码,这样的话,既保留了父类原有的功能,又扩展了这个函数的新功能。
方法重写的一些特性:

  1. 发生在子类和父类之间,参数列表必须完全与被重写方法的一致,返回类型必须完全与被重写方法的返回类型一致;
  2. 子类抛出的异常不能超过父类对应的方法,简单来说就是不能比父类被重写方法声明更多的异常(里氏代换原则);
  3. 子类方法的方位级别不能低于父类中相应方法的访问级别;
  4. 父类中的方法若是使用private、static、final任意修饰符修饰,则不能被重写;
public class Test{
	public static void main(String[] args) {
		SingleDog singledog = new SingleDog();
		dog.Smile();
		dog.eat();
		
		HomeDog homedog = new HomeDog();
		dog.Smile();
		dog.eat();
	}
}
class Dog{
	private String sex;//想要获取这个属性,可以写get方法
	protected String name;//protected:自身,子类及同一个包中类可以访问。
	public void Dog(String name ,String sex){
		this.name = name;
		this.sex = sex;
		System.out.println("父类构造方法");
	}
	public void eat(){
		System.out.println("吃饭");
	}
	public void getName(String name){
		this.name = name;
	}
}
class  SingleDog extends Dog{
	public void SingleDog(){
		super("帅哥","男");
		System.out.println("子类类构造方法");
	}
	public static void Smile(){
		System.out.println("哈哈,被骗了,我是一个人");
	}
	@Override
	public void eat(){
		System.out.println("富婆,饿饿,饭饭");
	}
}
class HomeDog extends Dog{
	public void SingleDog(){
		super("大黄","母");
		System.out.println("子类类构造方法");
	}
	public static void Smile(){
		System.out.println(name + "汪汪!");
	}
	@Override
	public void eat(){
		System.out.println("铲屎的,上菜");
	}
}

还有一个与方法重写的名字比较像的方法重载,我们之前学习过,他们的区别是什么呢?
面试题:Override与Overlode的区别?
Overlode:方法重载,发生在同一个类中,方法名相同,参数列表不同,返回值无关;
Override:方法重写,发生在子父类中,方法名相同,参数列表相同,返回值相同,子类的访问修饰符要大于等于父类,子类声明的异常不能比父类被重写方法声明更多的异常,父类中的方法若是使用private、static、final任意修饰符修饰,则不能被重写。

super

super()的作用:

  1. 使用super调用父类的属性,可以从父类实例处获得信息;
  2. 调用父类中的方法,可以委托父类帮助完成某件事情;
  3. 调用父类中的构造方法,必修在子类构造方法中的第一条语句,调用父类中相应的构造方法,若不写默认的调用父类中的无参构造方法;
public class Test{
	public static void main(String[] args) {
		SingleDog singledog = new SingleDog();
		dog.Smile();
		dog.eat();
		
		HomeDog homedog = new HomeDog();
		dog.Smile();
		dog.eat();
	}
}
class Dog{
	private String sex;//想要获取这个属性,可以写get方法
	protected String name;//protected:自身,子类及同一个包中类可以访问。
	public void Dog(String name ,String sex){
		this.name = name;
		this.sex = sex;
		System.out.println("父类构造方法");
	}
	public void eat(){
		System.out.println("吃饭");
	}
}
class  SingleDog extends Dog{
	public void SingleDog(){
		super("帅哥","男");
		System.out.println("子类类构造方法");
	}
	public static void Smile(){
		//调用父类的属性,如果是继承过来的,那么super可以省略
		System.out.println(super.name + "哈哈,被骗了,我是一个人");
	}
	@Override
	public void eat(){
		System.out.println("富婆,饿饿,饭饭");
	}
}
class HomeDog extends Dog{
	public void SingleDog(){
		super("大黄","母");
		System.out.println("子类类构造方法");
	}
	public static void Smile(){
		System.out.println(name + "汪汪!");
	}
	@Override
	public void eat(){
		super.eat();//调用父类方法(部分重写)
		System.out.println("铲屎的,上菜");
	}
}

知识补充

Object类
所有的类的最高父类
equals(正则) hashCode(16进制) toString
重写toString():以字符串形式返回对象的描述信息

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

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

相关文章

ARM uboot源码分析3-启动第一阶段

一、start.S 解析7 总结回顾:lowlevel_init.S 中总共做了哪些事情: 检查复位状态、IO 恢复、关看门狗、开发板供电锁存、时钟初始化、DDR 初始化、串口初始化并打印 ‘O’、tzpc 初始化、打印 ‘K’。 其中值得关注的:关看门狗、开发板供电锁…

计算机网络1:Tcp三次握手和四次挥手

一、TCP传输的过程-三次握手 1.建立连接并确认连接(三次握手) ** 过程: ** (1)客户端向服务端发出连接请求SYN1,seqx,等待服务端响应.状态由CLOSED转为SYN_SENT (2)服务…

升级到https

现在很多站长都会考虑将自己的站点从http升级到https,不仅是基于安全的考虑,有的也是因为第三方平台的限制,如谷歌浏览器会将http站点标记为不安全的站点,微信平台要求接入的微信小程序必须使用https等。 那如何将一个http站点升…

C++006-C++分支结构练习题

文章目录C006-C分支结构练习题案例练习题目描述 有一门课不及格的学生题目描述 分段函数题目描述 骑车与走路在线练习:总结C006-C分支结构练习题 在线练习: http://noi.openjudge.cn/ch0104/ https://www.luogu.com.cn/ 案例练习 参考:http…

春招Leetcode刷题日记-D1-贪心算法-分配问题

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 D1-贪心算法-分配问题何为贪心力扣455. 分发饼干思路代码何为贪心 1、顾名思义,贪心算法采用贪心的策略,保证每次操作都是局部最优的,从而…

神经网络损失函数分布可视化神器

论文名称和地址:Visualizing the Loss Landscape of Neural Netshttps://arxiv.org/pdf/1712.09913.pdf1.1 背景和动机作者主要想研究几个问题:为什么我们能够最小化高度非凸神经损失函数?为什么得到的最小值这个结果具有泛化性?不…

【C语言进阶】预处理与程序环境

目录一.详解编译与链接1.前言2.翻译环境3.剖析编译过程4.运行环境二.预处理详解1.预定义符号2.剖析#define(1).定义标识符(2).定义宏(3).替换规则(4).#和##(5).宏与函数的对比(6).#undef3.条件编译4.文件包含(1).头文件包含的方式(2).嵌套文件包含一.详解编译与链接 1.前言 在…

《流浪地球2》的现实倒影(三):从脑机接口到数字永生

是人,就会死。这个事实听起来或许很悲哀,但电影《流浪地球2》在一开始,就给出了另一种可能性——疯狂科学家进行数字生命实验,通过连接大脑的电极片,将思维意识上传到计算机,从而让人永生。电影开头的这位印…

《Keras深度学习:入门、实战与进阶》CIFAR-10图像识别

本文摘自《Keras深度学习:入门、实战与进阶》。 https://item.jd.com/10038325202263.html 这个数据集由Alex Krizhevsky、Vinod Nair和Geoffrey Hinton收集整理,共包含了60000张3232的彩色图像,50000张用于训练模型、10000张用于评估模型。…

JUC并发编程学习笔记(一)——知识补充(Threadlocal和引用类型)

强引用、弱引用、软引用、虚引用 Java执行 GC(垃圾回收)判断对象是否存活有两种方式,分别是引用计数法和引用链法(可达性分析法)。 **引用计数:**Java堆中给每个对象都有一个引用计数器,每当某个对象在其它地方被引用时,该对象的…

文献阅读:Scaling Instruction-Finetuned Language Models

文献阅读:Scaling Instruction-Finetuned Language Models 1. 文章简介2. 实验 1. 数据集 & 模型 1. 数据集考察2. 使用模型 2. scale up对模型效果的影响3. CoT对模型效果的影响4. 不同模型下Flan的影响5. 开放接口人工标注指标 3. 结论 文献链接:…

【C++】类和对象(一)

目录一、面向过程和面向对象初步认识二、类的引入三、类的定义四、类的访问限定符及封装4.1、访问限定符4.2、封装五、类的作用域六、类的实例化七、类对象的大小八、this指针8.1、this指针的引出8.2、this指针的特性8.3、C语言和C实现Stack的对比一、面向过程和面向对象初步认…

XSS漏洞,通过XSS实现网页挂马

**今天讲下通过XSS实现网页挂马~*,目的是了解安全方面知识,提升生活网络中辨别度 原理: 实验分为两部分: 1、通过Kali linux,利用MS14_064漏洞,制作一个木马服务器。存在该漏洞的用户一旦通过浏览器访问木…

C语言(C文件处理函数和文件指针)

C语言有很多文件操作函数,这里我们挑了一些重要的开始讲,首先说下这些函数都定义在stdio.h头文件中 目录 一.文件指针 二.文件处理函数 1.fopen(打开文件) 2.fclose(关闭文件) 3.getc和putc(从文件指针读取字符) 4.I/O工作…

「C++控制台生存游戏」暗黑体素 DarkVoxel 控制台版

“《只有作者能看懂的一款游戏》” 刚进高中前开始写的一款抽象的生存游戏 BUG很多请见谅 ###【点击此处,免费畅玩】### 类似泰拉瑞亚的一款游戏 『暗黑体素 DarkVoxel』 直接上图! 用控制台写出如此奇葩的生存游戏,可谓世间少有。 操作…

2022黑马Redis跟学笔记.实战篇(二)

2022黑马Redis跟学笔记.实战篇 二实战篇Redis开篇导读4.1短信登录4.1.1. 搭建黑马点评项目一、导入黑马点评项目二、导入SQL三、有关当前模型四、导入后端项目相关依赖配置redis和mysql连接项目组成概述关闭Linux防火墙五、导入前端工程六、 运行前端项目4.1.2. 基于Session实现…

选购交换机的参数依据和主要的参数指标详解

如何选购交换机?用什么交换机?在选购交换机时交换机的优劣无疑十分的重要,而交换机的优劣要从总体构架、性能和功能三方面入手。交换机选购时。性能方面除了要满足RFC2544建议的基本标准,即吞吐量、时延、丢包率外,随着…

网络是怎么连接笔记(一)WEB浏览器

文章目录介绍生成HTTP请求消息向DNS服务器查询WEB服务的IP地址全世界DNS服务器的大接力委托协议栈发送消息介绍 互联网整个消息传递流程 生成HTTP请求消息向DNS服务器查询WEB服务的IP地址然后DNS服务器进行查询IP地址委托协议给对应IP发送消息 生成HTTP请求消息 整个网络发…

Spring面试重点(三)——AOP循环依赖

Spring面试重点 AOP 前置通知(Before):在⽬标⽅法运行之前运行;后置通知(After):在⽬标⽅法运行结束之后运行;返回通知(AfterReturning):在⽬标…

2023年前端面试知识点总结(CSS篇)

近期整理了一下高频的前端面试题,分享给大家一起来学习。如有问题,欢迎指正! 1. 对CSS盒模型的理解 CSS3的盒模型有两种盒子模型:标准盒子模型、IE盒子模型 盒模型都是由四个部分组成的,分别是content(内容…