(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 ...
随机推荐
- 转载:哈希加密算法 MD5,SHA-1,SHA-2,SHA-256,SHA-512,SHA-3,RIPEMD-160 - aTool
http://www.atool.org/hash.php 一.MD5哈希加密算法 MD5即Message-Digest Algorithm 5(信息-摘要算法 5),用于确保信息传输完整一致.是计算 ...
- Socket编程 - 网络基础知识
API编程部分:http://www.cnblogs.com/Jimmy1988/p/7895213.html 1. 协议简介 此处,我们主要介绍Linux编程常用的三种协议(TCP/UDP/IP), ...
- jQuery 1.9/2.0/2.1及其以上 on 无效的解决办法
jQuery 1.9/2.0/2.1及其以上版本无法使用live函数了,然而jQuery 1.9及其以上版本提供了on函数来代替.本文讲解了jQuery on函数的使用方法,以及在使用jQuery函数 ...
- FileStream类的使用(文件流)
1.什么是FileStream类 FileStream 类对文件系统上的文件进行读取.写入.打开和关闭操作,并对其他与文件相关的操作系统句柄进行操作,如管道.标准输入和标准输出.读写操作可以指定为同步 ...
- 边框阴影box-shadow
边框的阴影: 参数说明: box-shadow:1px 2px 3px 4px #ccc inset: 1px 从原点开始,沿x轴正方向的长度(倘若为负值,为沿x轴负方向的长度) 2px 从原点开始, ...
- [日常] Linux使用diff来比较目录
Linux diff比较两个目录的不同: diff dir1 dir2 -urNaq -a --text Treat all files as text. -u -U NUM --unifi ...
- 一次单核CPU占用过高问题的处理
客户现场反馈,top的检查结果中,一个CPU的占用一直是100%.实际上现场有4个CPU,而且这个服务器是mysql专属服务器. 我的第一反应是io_thread一类的参数设置有问题,检查以后发现re ...
- Why we should overwrite the hashCode() when we overwrite the equals()
Preface Though I have used Java programme language for almost a year, I'm not familiar with a notion ...
- cakephp引入其他控制器封装方法
- js 中的console.log有什么作用
主要是方便你调式javascript用的.你可以看到你在页面中输出的内容. 相比alert他的优点是: 他能看到结构话的东西,如果是alert,淡出一个对象就是[object object],但是co ...