(1)封装 (2)static关键字 (3)继承
1.封装(重中之重)
1.1 基本概念
通常情况下,可以在测试类中给成员变量进行赋值,当给定的数值合法但不合理时,无论是编译还是运行阶段都不会报错或给出提示,此时与现实生活不符。
为了避免上述问题的发生,就需要对成员变量进行密封包装处理,该技术就叫封装,换句话说,封装就是一种保证成员变量值合理性的机制。
1.2 封装的流程
(1)私有化成员变量,使用private关键字修饰;
(2)提供公有的get成员变量和set成员变量方法,并在方法体中进行合理值的判断;
(3)在构造方法中调用set成员变量的方法来进行判断;
2.static关键字(重点)
2.1 基本概念
通常情况下,成员变量都隶属于对象层级,也就是每个对象在堆区中都有独立的内存空间记录各自的成员变量信息,当所有对象中的某个成员变量数值完全相同时,若每个对象还各自记录则会造成内存空间的浪费。
为了避免上述问题的发生,则使用static关键字修饰成员变量,表示"静态的"含义,此时该成员变量由对象层级提升为类层级被所有对象共享,该成员变量会随着类的加载而准备就绪,通常建议使用类名.的方式访问。
static关键字可以修饰成员变量,也可以修饰成员方法。
2.2 使用方式
(1)在非静态的成员方法中,既可以访问非静态的成员也可以访问静态的成员;
(成员:成员变量 + 成员方法 => 被所有对象共享)
(2)在静态的成员方法中,只能访问静态成员不能访问非静态成员;
(成员:成员变量 + 成员方法 => 调用静态方法时可能还没有创建对象)
(3)只有隶属于类层级被所有对象共享的内容才可以使用static修饰,
也就是不能滥用static关键字;
案例:
自定义Singleton类实现封装。
自定义TestSingleton类,要求在main()方法中能得到且只能得到Singleton类的一个对象。
2.3 单例设计模式(重中之重)
(1)基本概念
在某些特殊场合中,对于能创建且只能创建一个对象的类来说,叫做单例类。
设计单例类的思想和模式叫做单例设计模式。
(2)实现流程
a.私有化构造方法,使用private关键字修饰;
b.提供本类类型的引用指向本类类型的对象并使用private static关键字共同修饰;
c.提供公有的get成员变量方法负责将该对象返回出去;
(3)实现方式
单例设计模式主要分为两种:饿汉式 和 懒汉式,在以后的开发中推荐使用饿汉式。
3.继承(重中之重)
人类:
特征:姓名、年龄
行为:吃饭、娱乐
学生类 继承 人类:
特征:学号
行为:学习
教师类 继承 人类:
特征:工号
行为:讲课
工人类 继承 人类:
特征:薪水
行为:工作
... ...
3.1 基本概念
当多个类中有相同的特征和行为时,则可以将共性的内容提取出来组成一个公共类,让多个类分别吸收公共类中已有的特征和行为,在各个类的内部只需要编写自己独有特征和行为的机制,叫做继承。
使用继承可以提高代码的复用性,可维护性以及可扩展性。
在Java语言中使用extends关键字来表达继承的关系。
如:
public class Student extends Person{} - 表示Student类继承自Person类
其中Person类通常叫做超类、父类、基类。
其中Student类通常叫做派生类、子类、孩子类。
3.2 注意事项
(1)子类可以继承父类的成员变量和成员方法,包括私有成员变量但不能直接使用。
子类不可以继承父类的构造方法和私有方法。
(2)无论使用何种方式构造子类对象时,都会自动调用父类的无参构造方法来初始化从
父类中继承下来的成员,相当于在构造方法的第一行增加代码:super();的效果。
(3)在Java语言中支持单继承不支持多继承,也就是每个子类只有一个父类,而每个
父类可以有多个子类。
(4)使用继承必须满足以下逻辑关系:子类 is a 父类,也就是不能滥用继承。
3.3 this和super的比较
(1)基本概念
this关键字主要用于代表本类类型的对象;
super关键字主要用于代表父类类型的对象;
(2)使用方式
使用this.的方式可以访问本类的成员变量和成员方法;
使用super.的方式可以访问父类的成员变量和成员方法;
使用this(实参)的方式可以调用本类中的其他构造方法;
使用super(实参)的方式可以调用父类的构造方法;
要求大家掌握的用法:
a.使用this.的方式可以区分同名的成员变量和形参变量;
b.使用super(实参)的方式可以调用父类中的构造方法;
c.使用super.的方式可以调用父类中被重写以后的方法;
3.4 方法的重写(Override)
(1)基本概念
当父类中继承下来的方法不足以满足子类的需求时,则需要在子类中重新写一个和父类一样的方法,去覆盖从父类中继承下来的方法,叫做方法的重写。
(2)重写的原则
a.要求方法名、参数列表和返回值类型相同,从jdk1.5开始允许返回子类类型。
b.访问权限不能变小,可以相等或变大。
c.不能抛出更大的异常。
(1)封装 (2)static关键字 (3)继承的更多相关文章
- 094 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 02 static关键字 04 static关键字(续)
094 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 ...
- 093 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 02 static关键字 03 static关键字(下)
093 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 ...
- 092 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 02 static关键字 02 static关键字(中)
092 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 ...
- 091 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 02 static关键字 01 static关键字(上)
091 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 ...
- java中static关键字的继承问题
结论:java中静态属性和静态方法可以被继承,但是没有被重写(overwrite)而是被隐藏. 原因: 1). 静态方法和属性是属于类的,调用的时候直接通过类名.方法名完成对,不需要继承机制及可以调用 ...
- 面向对象编程(二)封装--构造方法,this关键字,static关键字,方法重载
面向对象三大特点:封装.继承.多态 封装概念 ① 将东西包装在一起,然后以新的完整形式呈现出来: 将方法和字段一起包装到一个单元中,单元以类的形式实现; ② 信息隐藏,隐藏对象的实现细节,不让 ...
- this关键字、static关键字、block块、封装类以及继承、import、修饰符的初步了解
this关键字 定义 在类的方法定义中使用this关键字代表使用该方法的引用. this即"自己",代表对象本身,谁调用代表谁.在成员方法中或构造器中隐式的传递. this的两种用 ...
- java:构造方法:无参构造/有参构造 this static关键字 静态变量 静态方法 代码块 封装 静态常量。
/*构造方法是一种特殊的方法,专门用于构造/实例化对象,形式:[修饰符] 类名(){ }构造方法根据是否有参数分为无参构造和有参构造*/public class Dog { ...
- 封装和static 以及关键字“this”的用法
1 封装 1.1 构造方法 构造方法是一种特殊的方法,专门用于构造/实例化对象,形式 [修饰符] 类名(){}: 1.1.1 无参构造 无参构造方法就是构造方法没有任何参数.构造方法在创建对象(new ...
随机推荐
- Linux下最常用的Shell命令的介绍
Shell基础: 你可以通过打开Linux的terminal(终端)来执行Shell命令.Shell的种类有很多种,例如CSH,Bourne Shell,Korn Shell.在现在的大多数Linux ...
- APS审核经验+审核资料汇总——计算机科学与技术专业上海德语审核
1.APS是什么 德国驻华使馆文化处留德人员审核部(简称APS)成立于2001年7月,是由德国驻华使馆文化处和德意志学术交流中心(DAAD)在北京共同合作成立的服务机构. APS是中国学生前往德国留学 ...
- wpf中应该使用c#四种定时器中的DispatcherTimer
c#中有四种定时器 1:System.Threading.Timer 使用: private System.Threading.Timer timerClose; timerClose = new S ...
- 如何在 Ubuntu 14.04 上安装 Elasticsearch,Logstash 和 Kibana
介绍 在本教程中,我们将去的 Elasticsearch 麋鹿堆栈安装 Ubuntu 14.04 — — 那就是,Elasticsearch 5.2.x,Logstash 2.2.x 和 Kibana ...
- $("input[name=name]").val(); 无法获取值问题
<input type="text" class="text" name="name" placeholder= 例如:上海" ...
- 请比较throw 合throws的区别
throw语句用在方法体内,表示抛出异常.throws语句用在方法声明的后面,表示再抛出异常,由该方法的调用者来处理.throws主要声明这个方法会抛出这种类型的异常,使它的调用者知道要捕获这个异常. ...
- 前端(九):react生命周期
一.组件渲染 当组件的props或者state发生改变时,组件会自动调用render方法重新渲染.当父组件被重新渲染时,子组件也会被递归渲染.那么组件是如何渲染的呢? # 方案一 1.state数据 ...
- SpringMVC整合Shiro安全框架(一)
一. 准备工作 1. 本文参考自张开涛的 <跟我学Shiro> 二. 简介 1. Apache Shiro是Java的一个安全框架.可以帮助我们完成:认证.授权.加密.会话管理.与Web集 ...
- 推荐 VSCode 上特别好用的 Vue 插件 - vetur
作者 @octref 此前 V2EX 发过帖子,最近新增代码补全功能,综合比较应该是目前 VSCode 上面最好用的 Vue 插件. 能够实现在 .vue 文件中: 语法错误检查,包括 CSS/SCS ...
- 使用JavaScript动态更改CSS样式
在很多情况下,都需要对网页上元素的样式进行动态的修改.在JavaScript中提供几种方式动态的修改样式,下面将介绍方法的使用.效果.以及缺陷. 1.使用obj.className来修改样式表的类名. ...