(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 ...
随机推荐
- BATJ面试必会之并发篇
一.线程状态转换 新建(New) 可运行(Runnable) 阻塞(Blocking) 无限期等待(Waiting) 限期等待(Timed Waiting) 死亡(Terminated) 二.使用线程 ...
- JAVA-6NIO之FileChannel
Java NIO中的FileChannel是一个连接到文件的通道.可以通过文件通道读写文件. FileChannel无法设置为非阻塞模式,它总是运行在阻塞模式下. 打开FileChannel 在使用F ...
- 细说setTimeout/setImmediate/process.nextTick的区别
node.js中的非IO的异步API提供了四种方法,分别为setTimeOut(),setInterval(),setImmediate()以及process.nextTick(),四种方法实现原理相 ...
- C#的async和awaiit的一些记录
一,最近在学习abp的东西.发现其中作者在获取数据时,大量的使用了async和awaiit.好吧,因为不太懂,所以网上搜搜,在这里记录一下. 先来看一段代码.调用UpdateUserAsync会返回一 ...
- 腾讯云CentOS安装JDK1.8
购买了腾讯云CentOS7系统,尝试搭建一个博客平台,首先要安装JDK. 一开始尝试用本地FTP上传JDK包到服务器,速度太慢,只有10K左右,放弃. 然后决定在服务器直接下载JDK进行安装. 执行 ...
- 我用ASP.NET缓存之数据缓存
[我的理解] Cache,是内置的对象集合.是全局的,类似于static Arraylist.它是线程安全的,添加或修改Cache中的项目时,不需要锁定或者解除Cache. 添加 Cache[Key] ...
- 二:Jquery-action
一:dom对象和jq对象 1.对象含义: dom对象:js方法获取元素,将dom对象存储在变量中 jq对象:jq方法获取元素的jq对象,将jq对象存储在变量中 相互之间不能使用另外一个对象的任何属性和 ...
- SEDA架构程序实现
一.SEDA SEDA全称是:stage event driver architecture,中文直译为“分阶段的事件驱动架构”,它旨在结合事件驱动和多线程模式两者的优点,从而做到易扩展,解耦合,高并 ...
- Java JDK 配置环境变量
使用了java也有了两年了,安装了很多次jdk都记不住安装步骤 = =,刚刚又配置了一次,码一下步骤: 1.右击"此电脑" ---> "属性" ----& ...
- Form表单和里边的小部件
一.Form表单:form表单是用来收集用户信息,并向后台提交信息的区域表单: 1.属性 “action” 是 “行为“的意思,该属性的值表示:用户提交信息到哪个页面: 2.属性”method“ 是” ...