今日学习计划
一、单例模式
1、单例模式是23种设计模式中最简单的一种设计模式。
2、为了解决什么问题?
—— 为了保证JVM中某一个类型的java对象永远只有一个。
—— 目的是为了节省内存的开销。
3、 单例模式要领
—— 构造方法私有化
—— 对外提供一个公开的静态的获取当前类型对象的方法
—— 提供一个当前类型的静态变量
4、单例模式分为两种。
—— 饿汉式单例: 在类加载的时候就会创建对象。
—— 懒汉式单例: 用到对象的时候才会创建对象。
5、单例模式的缺点
—— 单例模式的类型没有子类,无法被继承。
二、继承
1、继承最基本的作用是:代码重用。
2、继承的语法结构:
【修饰符列表】 class 子类目 extends 父类名{
类体;
}
3、 java语言中,类和类之间只支持单继承。
4、一个类如果没有显示的继承其它类,则该类默认值继承object。
object是SUN提供的java中的根类。
5、父类和子类的名词
—— 父类,超类,基类,superclass
—— 子类,派生类,subclass
6、 java语句中子类继承父类,会将父类所有的数据全部继承,包括私有的也能继承过来
但是在子类中无法直接访问父类中私有的数据。但是可以间接访问。
7、构造方法无法被子类继承。
三、方法的覆盖
1、什么时候方法要进行重写?
— 如果父类中的方法已经无法满足当前子类的业务需求,需要将父类中的方法重写一遍
2、子类如果重写父类中的方法之后,子类对象一定调用的是重写之后的方法。
3、发生方法覆盖的条件
—— 发生在具有继承关系的两个类之间
—— 必须具有相同的方法名,相同的返回值类型,相同的参数列表。
—— 重写的方法不能比被重写的方法拥有更低的访问权限。
—— 重写的方法不能比被重写的方法抛出更宽泛的异常。【异常机制】
—— 私有的方法不能被覆盖 。
—— 构造方法无法被覆盖,因为构造方法无法被继承。
—— 静态的方法不存在覆盖。
—— 覆盖指的是成员方法,和成员变量无关。
—— 私有的方法无法被覆盖。
4、继承最基本的作用:代码重用 ,
继承最重要的作用:代码重写;
四、多态
* 关于多态中涉及到的概念:
1、向上转型(upcasting)
—>子类型—>父类型
—>又被称为:自动类型转换
2、向下转型(downcasting)
—>父类型—>子类型
—>又被称为:强制类型转换【需要加强类型转换符】
3、无论是向上转型还是向下转型,两种类型之间必须要有继承关系。没有继承关系,程序是无法编译通过的。
4、 java程序永远都分为编译阶段和运行阶段。
5、父类型是引用指向子类型对象这种机制导致程序存在编译阶段和运行阶段绑定有不同数据,这种机制可以成为一种多态语法机制。
6、向下转型也需要两种类型之间必须有继承关系。不然编译器报错。强制类型转换需要加强制类型转换符。
7、什么时候需要使用向下转型?
—当调用的方法是子类中特有的,在父类型当中不存在,必须进行向下转型。
* 多态在实际开发中的作用,以下以主人喂养宠物为例说明多态的作用:
1、分析:主人喂养宠物这个场景需要实现需求进行了类型的抽象
— 主人【类】
— 主人可以喂养宠物,所以主人有喂养的这个动作
— 宠物【类】
— 宠物可以吃东西,所以宠物有吃东西的这个动作
2、面向对象编程的核心:定义好类,然后将类实例化为对象,在一个环境驱使下,让
每个对象协作起来形成一个系统。
3、多态的作用是什么?
— 降低程序的耦合度,提高程序的扩展力。
— 能使用多态尽量使用多态
— 父类型引用指向子类型对象。
4、面向抽象编程,尽量不要面向具体编程。
五、super关键字
1、super 不是引用类型,super中存储的不是内存地址,super指向的不是父亲对象。
2、super代表的是当前子类对象中的父类型特征。
3、什么时候使用super?
—— 子类和父类中都有某个数据,例如:子类和父类中都有一个相同的属性,如果要在子类中访问父类中的属性,需要使用 super。
4、super可以用在什么地方?
—— super可以用在成员方法中
—— super可以用在构造方法中
5、this和super都不能用在静态方法中。
6、super关键字用在构造方法中
语法:super(实参);
7、 作用:通过子类的构造方法去调用父类的构造方法。
8、 语法规则:一个构造方法第一行如果没有this(....);,也没有显示的去调用super(....);,系统会默认调用super();。
9、注意:super(......);的调用只能放在构造方法的第一行。
10、super(...)和this(...)不能共存。
11、super(...)调用了父类中的构造方法,但是并不会创建父类对象。
12、在java语言中只要是创建java对象,那么object中的无参数构造方法肯定会执行。
六、final关键字
1、final 修饰的类型无法被继承。
2、final 修饰的方法无法被覆盖。
3、final修饰的局部变量,一旦赋值,不可再改变。
4、final修饰的成员变量必须显示初始化数据。
5、final 修饰的成员变量一般和static联用,称为常量, 常量的值不可再改。
6、final修饰的引用类型,该引用不可重新指向其他的java对象。
但是final修饰的引用,该引用指向的对象的属性是可以修改的。