二 面向对象:
2.1封装
核心思想就是“隐藏细节”、“数据安全”:将对象不需要让外界访问的成员变量和方法私有化,只提供符合开发者意愿的公有方法来访问这些数据和逻辑,保证了数据的安全和程序的稳定。也就是属性和方法的封装
典型案例:属性私有,提供getter setter方法
2.2继承和类的实例化
子类继承父类里面所有的属性和方法,构造方法除外使用关键字:extends
私有的属性和方法也可以被继承 ,但是不能被访问
(1)在多个不同的类中抽取出共性的数据和逻辑,对这些共性的内容进行封装一个新的类即父类(也叫做超类或基类),让之前的类来继承这个类,那些共性的内容在子类中就不必重复定义,比如 BaseDAO、BaseAction 等。
(2)Java 的继承机制是单继承,即一个类只能有一个直接父类。
(3)如果子类和父类有同名成员变量和方法,子类可以使用 super 关键字调用父类的成员变量和方法,上述使用方式前提是成员在子类可见。
(4)在调用子类构造方法时,会隐式的调用父类的构造方法 super()。如果父类没有无参构造方法,为了避免编译错误,需要在子类构造方法中显式的调用父类的含参构造方法。
(5)子类创建时调用父类构造方法:子类需要使用父类的成员变量和方法,所以就要调用父类构造方法来初始化,之后再进行子类成员变量和方法的初始化。因此,构造方法是无法覆盖的。
(6)当子类需要扩展父类的某个方法时,可以覆盖父类方法,但是子类方法访问权限必须大于或等于父类权限。
(7)继承提高了程序的复用性、扩展性,也是 Java 语言多态特征的前提。
(8)在实际开发、程序设计过程中,并非先有的父类,而是先有了子类中通用的数据和逻辑,然后再抽取封装出来的父类。
实例化过程
(1)JVM 读取指定 classpath 路径下的 class 文件,加载到内存,如果有直接父类,也会加载父类;
(2)堆内存分配空间;
(3)执行父类、子类静态代码块;
(4)对象属性进行默认初始化;
(5)调用构造方法;
(6)在构造方法中,先调用父类构造方法初始化父类数据;
(7)初始化父类数据后,显示初始化,执行子类的构造代码块;
(8)再进行子类构造方法的特定初始化;
(9)初始化完毕后,将地址赋值给引用
2.3抽象
现实生活中的具体某个事物 转化成Java里面类的过程,只抽象与业务相关联的属性和方法例如:人(ID,姓名,年龄,电话,家庭住址 buy();eat();walk()?
2.4多态
一个事务的多种表现形式
编译时多态:看左边(父类)
运行时多态:看右边(子类)
Person p=new Person(); //普通创建对象(不是多态)
Person p=new Student(); //多态
Person p=new Teacher(); //多态
Shape shape=new Circle(); //多态
List list=new ArrayList(); //多态
2.5静态变量与成员变量与static关键字,this和super关键字,final关键字
静态变量就是被static关键字修饰的变量,在类被实例化时初始化,有且这有一份,被多个对象共享
成员变量是属于对象的变量,每个对象的成员变量不相同
final:最终的 终极的
属性或者变量:不可被修改 常量,命名:全部大写
方法:不可被重写
类:不可被继承
static:静态的
属性或者变量:属于类的,类加载的时候执行,共享的,有且只有一份,可以通过类名直接访问
方法:属于类的,类加载的时候执行,可以通过类名直接访问,一般工具类定义的时候使用
this:当前对象
<