当前位置:网站首页>继承和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(){
}
}
边栏推荐
- 金仓数据库 KDTS 迁移工具使用指南 (5. SHELL版使用说明)
- 怎么写专利更容易通过?
- js-第一个出现两次的字母
- 第一次用postgreSQL,想装主从,用的12.7 tar.gz版本。安装好后没在 share目录下找到样例配置recovery.conf.sample,是安装方式不对,还是路径不对?
- 2022年化工自动化控制仪表考试模拟100题及模拟考试
- 安装GBase 8c数据库集群时,报错误码:80000306,显示Dcs cluster not healthy。怎么处理错误呢?
- RL学习笔记(一)
- 【无标题】
- 经典二分法查找的进阶题目——LeetCode33 搜索旋转排序数组
- 【虚幻引擎UE】UE5基于Gltf加载插件实现gltf格式骨骼动画在线/本地导入和切换
猜你喜欢
随机推荐
金仓数据库KingbaseES客户端编程接口指南-JDBC(5. JDBC 查询结果集处理)
【JS 逆向百例】某网站加速乐 Cookie 混淆逆向详解
How many assertion methods are commonly used in JMeter?
去掉js代码文件所有注释
【NOI模拟赛】纸老虎博弈(博弈论SG函数,长链剖分)
JMeter 常用的几种断言方法,你会几种呢?
解决报错: YarnScheduler: Initial job has not accepted any resources
BFM模型和Landmarks可视化
虚拟机没有USB网卡选项怎么解决
经典二分法查找的进阶题目——LeetCode33 搜索旋转排序数组
2022年制冷与空调设备运行操作特种作业证考试题库及模拟考试
为什么手动启动GBase 8c数据库中GTM节点,起不来。显示“Run cmd failed:scp: /tmp/gtm_gtm1.server: Permission denied”
csdn图片去水印 | 其他方法无效时的解决方案
sql在字段重复时 对某个字段根据最新时间取数
力扣 剑指 Offer 04. 二维数组中的查找
安装GBase 8c数据库集群时,报错误码:80000306,显示Dcs cluster not healthy。怎么处理错误呢?
注意力机制
【论文笔记】Understanding Long Programming Languages with Structure-Aware Sparse Attention
Shared_preload_libraries cause many syntaxes not supported
Linux之Redis 缓存雪崩,击穿,穿透