1.final
final修饰的类不能有子类
final在修饰方法的时候方法不能被重写
final定义的变量必须初始化值,并且不能被更改
空白final:在类中,允许把成员变量的赋值放到构造方法里
2.Object
equals //默认比较两个地址
hashcode //获取哈希码值
toString //默认调用
getClass获得当前对象的字节码文件对象,一个类只有一个字节码文件对象
clone
要想使用clone方法,当前类必须实现Cloneable接口
要想使用必须要重写这个方法
不是所有系统类都实现了他,实现了他的有ArrayList,LinkedList等
3.abstract
抽象类/抽象方法
类里面有抽象方法,一定是抽象类
对于抽象类,可以有抽象方法,可以有普通方法,抽象类里的抽象方法只定义
普通类能直接创建对象
抽象类必须通过被继承来实现
abstract,final,static,private可否同时使用
①abstract不能与final,static,private任意一个关键字公用,
因为抽象类必须被继承来实现,而final修饰的类不能被继承
static修饰可以被类名直接调用,而抽象方法没有方法体
abstract修饰的方法需要被子类重写,而private修饰的方法只能自己类内部访问
4.interface
类和类之间是单继承(extends)
接口和接口是多继承(extends)
接口的功能:间接的实现多继承
接口也是抽象的
一个类可以同时实现多个接口 以,隔开
一个类同时实现多个接口的同时,如果两个接口中有相同的方法名,无论接口中是否实现,必须在类中重写该方法
从JDK1.7开始:接口中允许有方法的实现,但是方法必须使用static或default实现
5.设计模式
23种设计模式–任意一种设计模式都由类实现
单例设计模式
将某个功能全局化,减少类与类的关系,提高内聚性,降低耦合性
①一个类在整个程序当中只允许有一个对象
②提供一个全局访问点
③提供出去
④别人怎么使用
饿汉式:在线程中不需要考虑安全,本身就是安全的
直接在类内部建立对象的时候赋值;
private final static SingleInstance s=new SingInstance();
懒汉式:
private static SingleInstance s=null;
在类内部方法里赋值;
模板设计模式
最重要的应用:HttpServlet中的servlet()与Servlet中的get(),post()方法形成了模板设计模式,Servlet是HttpServlet的子类,
Servlet执行时,调用父类的servlet()方法,父类的servlet()中调用子类的(父类中定义的抽象类,子类中实现)方法;
6.多态
父类的引用指向子类的对象
动态类型,动态绑定,动态加载
继承是多态的前提
Person person=new Student();
只有运行才确定person指向Student
person只能直接调用父类有的方法,不能调用student中有而父类中没有的方法
向下转型:为了调用子类特有的方法
继承中:调用父类和子类同名的成员变量,看子类,会把父类的成员变量覆盖
多态中:调用父类和子类同名的成员变量,编译的时候能不能访问看父类,运行的时候看父类的值,不会覆盖
成员方法:编译的时候看父类,运行的时候看子类
静态成员方法:编译与运行都看父类
7.内部类
定义在一个类的内部的类,内部类的地位与外部类的成员变量,成员方法平等
功能:间接实现多继承
方便定义
只有外部类可以访问内部类的方法,包括私有成员变量
局部内部类
定义在一个方法中的类
增强了代码的可读性和可操作性
静态内部类
Out.Inner a=inner=new Out.Inner();
匿名子类对象
①使用已有的子类对象创建匿名子类对象
new kidsClass().fangfa();
②使用父类直接创建匿名子类对象
只能使用一次,每次都可以使用自定义的不同功能
new SuperClass(){
重写父类的方法
也可以写自己的方法
}
匿名内部类
定义在一个类方法中的匿名子类对象,属于局部内部类
充当参数
充当返回值
除了new Object()之外,所有的匿名对象都是匿名内部类