当前位置:网站首页>继承和static关键字
继承和static关键字
2022-08-04 08:52:00 【四分十七】
目录
面向对象的三大特征之二:继承
继承概述、使用继承的好处
什么是继承? Java允许一个类通过extends与另一个类建立父子关系,这就是继承。
继承的格式:
子类 extends 父类
继承的特点:
子类继承父类后,就可以得到父类的属性和行为。
继承的核心优点:
提高代码的复用性,多个子类的相同代码可以放在父类中,增强了类的扩展性。
继承的设计规范、内存运行原理
设计规范:子类共用属性和行为放在父类,子类独有属性和行为放在子类自己那里。
内存原理:很重要。
继承的特点
子类可以继承父类的属性和行为,但是子类不能继承父类的构造器。
子类可以继承父类私有成员吗?有争议的,我认为可以,只是不能直接访问。
子类可以直接用子类名访问父类静态成员。那么子类继承了父类静态成员吗?? 我认为没有继承,只能可以共享的去访问父类静态成员,共享并非继承。
Java是单继承模式:一个类只能继承一个直接父类。
Java不支持多继承、但是支持多层继承。
Java中所有的类都是Object类的子类。
继承后:成员变量、成员方法的访问特点
就近原则
this.子类自己的成员变量
在子类方法中访问父类成员怎么办??? super.父类成员变量/父类成员方法
继承后:方法重写
概念:子类重写了一个申明与父类一样的方法,覆盖父类的方法。子类认为父类的该方法不好用,以后用自己重写的方法。
重写方法建议加上一个重写校验注解:@Override
作用:要求必须是正确重写的才不报错
作用2:可读性好
重写的要求:
重写方法的名称和形参列表必须与父类被重写方法的名称和形参列表一致(重点)
私有方法不能重写
静态方法不能重写
重写方法的权限 >= 被重写方法的访问权限。
继承后:子类构造器的特点
特点:子类的全部构造器默认都会先访问父类的无参数构造器,再执行自己的构造器
why? 先有爸爸才有儿子。 先调用它爸爸的构造器初始化父类的数据,再调用自己的构造器初始化自己的数据。
代码层面:默认子类构造器的第一行都有一个super() 访问父类的无参数构造器,写不写都有
继承后:子类构造器访问父类有参构造器
调用父类有参数构造器,初始化继承自父类的数据。
super(....) 根据参数调用父类构造器
this、super使用总结
this访问子类当前对象的成员。
super:在子类方法中指定访问父类的成员。
this(...) : 访问本类兄弟构造器
super(...):在本类构造器中指定访问父类的构造器
注意事项:super(...) 必须放在第一行,this(...) 也必须在第一行。因此2者不能共存一个构造器中。
static关键字
是什么? 静态的意思,可以修饰成员变量,可以修饰成员方法
static修饰成员变量的分类
静态成员变量
有static修饰,属于类,与类一起加载,内存中只有一份,可以被共享访问。
什么时候用呢?如果信息要被共享,只需要一份就用,比如:系统在线人数。
访问规则:
建议用类名访问:类名.静态成员变量
注意:同一个类中,访问静态成员可以省略类名不写。
理论上也可以这样访问:对象名.静态成员变量(不推荐)
实例成员变量
无static修饰,属于对象,每个对象中都存在一份实例成员变量。比如:name age
什么时候用呢?比如:name age,每个对象中都有这些信息,而且信息还不同时,定义成实例成员变量。
访问规则:
只能用:对象名.实例成员变量。
static修饰成员方法
静态成员方法
有static修饰,属于类,与类一起加载,可以被共享访问。
什么时候用呢?如果是做一个通用功能。
访问规则:
建议用类名访问:类名.静态方法
注意:同一个类中,访问静态成员可以省略类名不写。
理论上也可以这样访问:对象名.静态成员方法(不推荐)
实例成员方法
无static修饰,属于对象,必须用对象触发访问。
什么时候用呢?如果这个方法属于对象,而且要直接访问对象的实例成员,则申明成实例方法。
访问规则:
只能用:对象名.实例成员方法。
static的应用知识
工具类
是什么? 里面都是静态方法,为了完成一个共用功能
好处:一次编写,处处可调,提高代码的复用,提高开发的效率。
注意:建议把工具类的构造器私有化,因为工具类无需对外创建对象,它的方法都是静态方法,直接用类名访问即可。
代码块
是什么? 类的5大成分(成员变量、成员方法、构造器、代码块、内部类)
分类
静态代码块:(重点了解一下)
格式:static {}
特点:属于类,与类一起优先加载,自动触发执行一次。
作用:可以用于在程序启动时,进行静态资源的初始化操作。
实例代码块(几乎不用):
格式:{}
特点:属于对象的,每次调用构造器构建对象前都会执行一次,再执行构造器。
作用:可以用于初始化实例资源
单例
单例是一种设计模式,是为了解决某个问题
单例解决:保证一个类对外只能产生一个对象。
重点在于如何实现单例:
饿汉单例
特点:拿对象时,对象已经存在
实现步骤:
1、构造器私有
2、定义静态成员变量存储一个对象。
代码
/**
使用饿汉单例实现单例类
*/
public class SingleInstance {
/**
2、饿汉单例是在获取对象前,对象已经提前准备好了一个。
这个对象只能是一个,所以定义静态成员变量记住。
*/
public static SingleInstance instance = new SingleInstance();
/**
1、必须把构造器私有化。
*/
private SingleInstance(){
}
}
懒汉单例
特点:要拿对象的时候,才开始创建一个对象。
实现步骤:
1、构造器私有
2、定义静态成员变量,暂时不存对象。
代码
/**
懒汉单例
*/
public class SingleInstance2 {
/**
2、定义一个静态的成员变量负责存储一个对象。
只加载一次,只有一份。
注意:最好私有化,这样可以避免给别人挖坑!
*/
private static SingleInstance2 instance;
/**
3、提供一个方法,对外返回单例对象。
*/
public static SingleInstance2 getInstance() {
if(instance == null){
// 第一次来拿对象 :此时需要创建对象。
instance = new SingleInstance2();
}
return instance;
}
/**
1、私有化构造器
*/
private SingleInstance2(){
}
}
边栏推荐
- 【论文笔记】Dynamic Convolution: Attention over Convolution Kernels
- 技术实现 | 图像检索及其在高德的应用
- 户外徒步旅行
- inject() can only be used inside setup() or functional components.
- 递归思想
- 用OpenGL绘制winXP版扫雷的笑脸表情
- GBase 8c数据库集群中,怎么替换节点呢?比如设置A节点为gtm,换到B节点上。
- 关于#sql#的问题:后面换了一个数据库里面的数据就不能跑了
- C Language Lectures from Scratch Part 6: Structure
- 将jpg图片转换成yuv420(NV12)数据文件
猜你喜欢
【CNN基础】转置卷积学习笔记
2022年制冷与空调设备运行操作特种作业证考试题库及模拟考试
inject() can only be used inside setup() or functional components.
DNS 查询原理详解—— 阮一峰的网络日志
ShuffleNet v2网络结构复现(Pytorch版)
The difference between character stream and byte stream
YOLOv5应用轻量级通用上采样算子CARAFE
DWB主题事实及ST数据应用层构建,220803,,
sql在字段重复时 对某个字段根据最新时间取数
JMeter 常用的几种断言方法,你会几种呢?
随机推荐
为什么手动启动GBase 8c数据库中GTM节点,起不来。显示“Run cmd failed:scp: /tmp/gtm_gtm1.server: Permission denied”
inject() can only be used inside setup() or functional components.
Convert callback function to Flow
Linux Redis cache avalanche, breakdown, penetration
Apache Druid 实时分析数据库入门介绍
研究性学习专题 3_LL(1)语法分析设计原理与实现
How many assertion methods are commonly used in JMeter?
设计信息录入界面,完成人员基本信息的录入工作,
ShuffleNet v2网络结构复现(Pytorch版)
预测性维护学习之路
<jsp:useBean>动作的使用
推荐几种可以直接翻译PDF英文文献的方法
沃尔玛、阿里国际该如何做测评自养号?
js-第一个出现两次的字母
【JS 逆向百例】某网站加速乐 Cookie 混淆逆向详解
【论文笔记】Dynamic Convolution: Attention over Convolution Kernels
占位,稍后补上
MATLAB/Simulink快捷键
在安装GBase 8c数据库的时候,报错显示“Host ips belong to different cluster”。这是为什么呢?有什么解决办法?
怎么写专利更容易通过?