访问修饰符

image.png

封装

封装:封装就是把抽象出来的数据【属性】以及对数据的操作【方法】,数据被保护再程序的内部,程序其他部分只能通过授权的操作【方法】才可以对数据进行操作
三点步骤:

  1. 将属性是私有化
  2. 设置get和set方法

    #继承:

    1)子类继承了所有的属性和方法,非私有的属性和方法可以在子类直接访问, 但是私有属性和方法不能在子类直接访 问,要通过父类提供公共的方法去访问
    2)子类必须调用父类的构造器, 完成父类的初始化
    3)当创建子类对象时,不管使用子类的哪个构造器,默认情况下总会去调用父类的无参构造器,如果父类没有提供无 参构造器,则必须在子类的构造器中用 super 去指定使用父类的哪个构造器完成对父类的初始化工作,否则,编译就会报错。
    4)如果希望指定去调用父类的某个构造器,则显式的调用一下 : super(参数列表)
    5)super 在使用时,必须放在构造器第一行(super 只能在构造器中使用)
    6)super() 和 this() 都只能放在构造器第一行,因此这两个方法不能共存在一个构造器
    7)java 所有类都是 Object 类的子类, Object 是所有类的基类.
    8)父类构造器的调用不限于直接父类!将一直往上追溯直到 Object 类(顶级父类)
    9)子类最多只能继承一个父类(指直接继承),即 java 中是单继承机制。
    10)不能滥用继承,子类和父类之间必须满足 is-a 的逻辑关系

重写: 子类重写父类的方法
要求方法名和形参列表一致,子类方法的放回类型必须是父类方法放回类型一致或者是其子类。子类方法不能缩小父类的访问权限。

多态

注意:

  1. 一个对象的编译类型和运行类型可以不一致
  2. 编译类型再创建对象就确定了,不能改变
  3. 运行类型是可以改变的
  4. 编译类型看 = 号的左边,运行类型看=号的右边

多态的前提是:两个对象存在继承关系
多态的向上转型

  1. 本质:父类的引用指向子类的对象
  2. 语法:父类类型 引用名 = new 子类类型
  3. 特点:编译类型看等号左边,运行类型看等号右边

可以调用父类的所有成员(遵守访问权限)
不能调用子类特有成员
最终的运行效果看子类的实现。
向下转型

  1. 语法:子类类型 引用名 = (子类类型)父类引用
  2. 只能强转父类的引用,不能强转父类的对象
  3. 要求父类的引用必须指向当前目标类型对象
  4. 当向下转型后,可以调用子类类型的的所有成员

属性没有重写之说!属性的值看编译类型
obj instanceof classs:obj 为 Class 的对象,或者是其直接或间接子类,或者是其接口的实现类,结果result 都返回 true,否则返回false

==和equals方法对比

  1. == 是一个比较运算符
  2. == 既可以判断基本数据类型,又可以判断引用类型
  3. 如果判断基本数据类型,判断的是值是否相等
  4. 如果判断引用类型,则判断的是地址是否相等,也即是都为同一个对象

toString 方法

  1. 默认返回:全类名+@+哈希值的十六进制
  2. 重写tostring方法,打印对象或者拼接对象时,回自动调用改对象的toString方法
  3. 当直接输出一个对象时,toString方法就会默认调用。

finalize 方法

  1. 当对象被回收时,系统自动调用该对象的 finalize 方法。子类可以重写该方法,做一些释放资源的操作
  2. 什么时候被回收:当某个对象没有任何引用时,则 jvm 就认为这个对象是一个垃圾对象,就会使用垃圾回收机制来 销毁该对象,在销毁该对象前,会先调用 finalize 方法
  3. 垃圾回收机制的调用,是由系统来决定(即有自己的 GC 算法), 也可以通过 System.gc() 主动触发垃圾回收机制

类变量

类变量就是静态变量/静态属性,时该类所有对象共享的变量,任何一个该类的对象去访问它时,取到的都是相同的值,同样任何一个该类的对象去修改它时,都时修改的同一个变量

  1. 类变量时所有该类对象共享的,可以通过【类名.属性/对象.属性访问】,类变量时再类加载时候就创建了,用static修饰。

main方法

main方法的形式:public static void main(String【】args)

  1. mian方法是虚拟机调用的
  2. java虚拟机调用类的main()方法,所以该方法的访问权限必须是public
  3. java虚拟机再指向main方法时候不需要创建对象,所以该方法是static的
  4. 该方法接受的Strring类型的数组参数,该数组中报错指向java命令是传递给所运行类的参数

注意:
1) 在 main()方法中,我们可以直接调用 main 方法所在类的静态方法或静态属性。
2) 但是,不能直接访问该类中的非静态成员,必须创建该类的一个实例对象后,才能通过这个对象去访问类中的非静 态成员,

代码块

代码块又称为初始化快,是属于类的成员,类似于方法,将代码封装再方法体中。通过{}包围起来,不同于方法,它没有方法名、返回、参数。不是通过类或者对象显示调用,而是再加载类是或创建对象时隐事调用。
注意:

  1. 修饰符可选,要写的话,只能是static
  2. 代码块分为两类:使用static修饰的交静态代码块,没有使用static修饰的交非静态代码块
  3. 逻辑语句可以是任意的逻辑语句
  4. ;号可以写上,也可以省略

相当于是另外一种形式的构造器或者说是对构造器的补充
代码块调用的顺序优先于构造器。
image.png
image.png
image.png
image.png


单例设计模式

  1. 概念:所谓的单例设计模式,就是采取一定的方法保证整个软件系统中某一个类只能存在一个对象实例,并且该类只提供一个取得器对象实例的方法
  2. 单例设计模式分为:饿汉式 懒汉式

饿汉式:

  1. 构造器私有化
  2. 类的内部创建对象(修饰static以便静态方法调用)
  3. 向外暴露一个静态的公共方法,getInstance

懒汉式

  1. 构造器私有化
  2. 定义一个成员变量
  3. 向外暴露一个静态公有方法getInstace() 【在方法里面创建对象】

image.png

final关键字

image.png
image.pngimage.png

抽象类

image.png
image.png
image.pngimage.png

接口

接口就是给出一些没有实现的方法封装在一起,到某个类使用的时候,根据具体情况把这些方法实现
jdk8.0中,接口类可以有静态方法,默认方法,也就是说接口中的可以有方法的具体实现
image.png
image.png

内部类

如果定义在类的局部位置:1)局部内部类 2)匿名内部类
如果在成员位置: 1)成员内部类 2)静态内部类

局部内部类image.png

匿名内部类

(1)本质还是一个类 (2)内部类 (3)该类没有名字 (4)同时还是一个对象
基本语法:
new 类或者接口(参数列表){
类体
}
image.png

局部内部类

非静态成员内部类

image.png
image.png
image.png

静态成员内部类

image.png