Day08
-----------------------------------------------------------------------------------
今天内容:
(1)封装
(2)static关键字
(3)继承
1.封装(重中之重 20遍)
1.1 基本概念
通常情况下,可以在测试类中给成员变量赋值一些合法但不合理的数值,无论是编译阶段还是运行阶段都不会报错或给出提示,此时与现实生活不符。
为了避免上述问题的发生,就需要对成员变量进行密封包装处理,因此叫封装,换句话说,封装就是一种保证成员变量值合理性的机制。
1.2 实现流程
(1)私有化成员变量,使用private关键字修饰;
(2)提供公有的get和set成员变量的方法,在方法体中进行合理值的判断;
(3)在构造方法中调用set()方法进行合理值的判断;
案例:
编程实现Person类的封装,特征:姓名、年龄、国籍,要求提供打印所有特征的方法。
2.static关键字(重点)
2.1 基本概念
通常情况下成员变量都隶属于对象层级,每个对象都拥有独立的内存空间记录独立的特征信息,若所有对象中某个特征信息完全一致却又单独记录,则会造成内存空间的浪费。
为了避免上述问题,可以使用static关键字修饰成员变量表示静态的含义,此时该成员变量由对象层级提升为类层级,内存空间中只保留一份被所有对象共享,该成员变量随着类的加载准备就绪,与是否创建对象无关,通常建议使用类名.的方式访问。
static关键字可以修饰成员变量和成员方法。
2.2 使用方式
(1)在非静态的成员方法中既可以访问非静态的成员也可以访问静态的成员;
(成员:成员变量 + 成员方法 静态的成员被所有对象共享)
(2)在静态的成员方法中可以访问静态的成员不能访问非静态的成员;
(成员:成员变量 + 成员方法 此时还没有创建对象)
(3)只有隶属于类层级被所有对象共享的内容才可以使用static修饰,也就是不能滥用static
案例:
编程实现Singleton类的封装,然后编写TestSingleton类,要求在TestSingleton类的main()方法中能得到且只能得到Singleton类的一个对象。
2.3 单例设计模式(重中之重 20遍)
(1)基本概念
在某些特殊场合中一个类对外提供且只提供一个对象,这样的类称为单例类。
编写单例类的模式和套路叫做单例设计模式。
(2)实现流程
a.私有化构造方法,使用private关键字修饰;
b.提供本类类型的引用指向本类类型的对象,并使用private static共同修饰;
c.提供公有的get方法负责将本类的引用返回出去,并使用static修饰;
(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 父类,也就是不能滥用继承。
作业:
1.复习和理解封装类和单例设计模式以及继承。
2.提示用户输入班级的学生人数以及每个学生的信息,学生的信息有:学号、姓名、
年龄,最后分别打印出来。
提示:
Student[] arr = new Student[num];
3.编程实现以下内容:
自定义Animal类,特征有:名字、年龄,要求实现该类的封装并提供打印特征的方法
自定义Dog类继承Animal,特征有:毛色,要求实现该类的封装并提供打印特征的方法
自定义TestDog类,在main()方法中创建Dog类的对象并打印特征。