多态设计思想
Animal a = newCat();
如上图所示 : 其实就是一个子类的实例赋值给其父类类型的变量。
此时对象a有两种类型
1.编译时:声明的是什么类型,就看作是什么类型 | Animal 类 |
2.运行时:创建对象的类型,即实用对象的真正类型 | Cat 类 |
Animal a = null;
a = new Dog();
a = new Cat();
可以看出a是有多重形态的。
多态的作用:当把不同的子类对象都当作父类的类型来看,可以屏蔽不同子类对象之间的实现差异,
从而通过通用的代码达到通用编程,以适应需求的不断变化。
zum.B.
多态时方法调用
前提:必须先存在多态情况
存在父类:SuperClass,子类:SubClass 方法:doWork
引用类型的强制类型转换
字段不存在多态
通过对象调用字段,在编译时期就已经决定了调用那一块内存空间的数据.
--------->字段不存在覆盖的概念,在多态时,不能有多态特征(在运行时期体现子类特征).
只有方法才有覆盖的概念.
组合关系
继承关系: 子类可以继承到父类中部分的成员,那么此时子类是可以修改到父类的信息的.
继承关系破坏封装,为了复用代码可能会让子类具有不该具有的功能.
为什么引入继承: 为了代码复用问题.
解决代码复用问题,不一定非要使用继承,也可以使用”包含关系”(has A).
初始化代码块
使用普通初始化代码块
使用静态初始化代码块(先初始化所有静态代码块--父类代码块--父类构造器--子类代码块--子类构造器)
特点:所在类被加载后就执行,和静态方法一样不能访问外部实例成员。
优先于主方法执行,优先于构造代码块执行,不管有创建多少对象,静态代码块只执行一次,可用于给
做应用的初始化操作,一般用于做初始化操作,家在资源等操作。
单例设计模式
目的:保证整个应用中某一个类有且只有一个实例(一个类在内存只存在一个对象),即所有指向该类型实例的引用都指向同一块内存空间。
饿汉式:单例类被加载进内存,对象就建好了
写单例模式的步骤:单讲饿汉式.
1):必须在该类中,自己先创建出一个对象.
2):私有化自身的构造器,防止外界通过构造器创建新的对象.
3):想外暴露一个公共的静态方法用于获取自身的对象.
懒汉式:对象是方法第一次需要时才创建,也称对象的延迟加载
final修饰符
继承关系最大弊端是破坏封装:子类能访问父类的实现细节,而且可以通过方法覆盖的形式修改实现细节.
final 类
表示最终的类,该类不能再有子类(只要满足以下条件就可以把一个类设计成final类)
1,某个类不是专门为继承而设计的
2,处于安全考虑,类的实现细节不许改动,不准修改源代码
3,确信该类不会再被拓展
��java里final修饰的类有很多,比如八大基础数据类型的包装类和String类等
final 方法
最终的方法,表示该类不能够被子类覆盖(需要用final修饰的方法)
1,在父类中提供的统一的算法骨架,不准子类通过方法覆盖来修改,此时使用final修饰,模板方法设计模式
2,在构造器中调用的方法(初始化方法),此时一般使用final修饰
��final修饰的方法,子类可以调用,但是不能覆盖
final 变量
表示最终的变量,常量,该变量只能赋值一次,不能再赋值
1,final变量必须显示地指定初始值,系统不会为final字段初始化
2,final变量一旦被初始化,就不能被重新赋值
3,常量名规范 全部大写
��final是唯一 一个可以修饰局部变量的修饰符---》具体后续局部内部类
一般我们会专门定义一个常量类,专门用来存储常量数据
public static final double PI = 3.141592653589793 ;
public static final int MAX_VALUE = 1000;
工具类的设计
工具类如何设计: 工具在开发中其实只需要存在一份即可.
1):如果工具方法没有使用static修饰,说明工具方法得使用工具类的对象来调用.
此时把工具类设计为单例的.
2):如果工具方法全部使用static修饰,说明工具方法只需要使用工具类名调用即可.
此时必须把工具类的构造器私有化(防止创建工具类对象调用静态方法).
----------------------------------------------------------------------
一般的,首选第二种,简单. 在JDK中提供的工具类都是第二种. 如java.util.Arrays类.