Interface
定义:
Interface 是定义接口关键字
语法 : public interface 接口名 { }
接口不能被实例化对象,接口中也没有构造方法
主要是解决java中单继承功能变弱的问题
一个类只能继承一个父类,但是可以实现很多接口,多个之间使用 逗号 隔开,由extends变成了implements
Java1.8之前 接口中只有抽象方法和常量,但是public,static,final,abstract 都可以省略1.8开始 可以有静态,也可以有default(可以解决为普通类中的成员方法)
静态方法直接使用接口名调用即可Default方法,实现类对象可以调用,也可以覆写
1.9开始 支持private 方法
注意:接口与接口之间是多继承,类与接口之间是多实现
***类关系: ***
继承:
使用extends表示 又称为泛化关系,类和类单继承,接口和接口多继承
实现:
Implements,类和接口是多实现
依赖:
某个类中的局部变量,是另一个类对象引用,这种关系是临时性的,方法执行结束关系就不存在了
关联:
比依赖更强,一般是长期的一个类中的成员变量是另一个类对象的引用
聚合:
整体和局部可以分离,各自具有各自的生命周期
组合:
组合关系要强与聚合关系,也有叫强聚合的
注意:聚合和组合是关联的两种特例,是更强的关联
内部类
在一个事物的内部,还有一个部分需要一个完整的结构进行描述,而这个内 部的完整的结构又只为外部事物提供服务,那么整个内部的完整结构最好使 用内部类
类体中还有一个类
内部类还有一个重要的作用,就是可以访问外部类的私有属性
静态变量 – 静态内部类
成员变量 – 普通内部类
局部变量 – 局部内部类
形参和实参 – 匿名内部类
成员内部类:
可以等同看做成员变量
成员内部类中不能有静态声明
成员内部类中可以直接访问外部类所有属性
可以使用访问权限控制修饰符
内部类类名 : 外部类$内部类
静态内部类:
静态内部类可以看做静态变量
静态内部类中可以有任何声明
静态内部类中可以直接访问外部类静态数据,无法直接访问成员数据
局部内部类:
局部内部类就等同于局部变量
局部内部类访问外部方法的局部变量的时候,该变量需要加final修饰,1.8开始final可以省略
不管外部方法是静态还是成员,局部内部类中都不能使用static修饰类,同时类中也不能有静态声明
如果外部方法是成员方法,则局部内部类中可以直接访问外部类任何属性
如果外部方法是静态方法,则局部内部类中不能直接访问外部类的成员属性
局部内部类名字是 : 外部类$1内部类 , 外部类$2内部类 以此类推
匿名内部类:
匿名内部类 : 指在调用方法时,需要传入一个对象(一般是接口的实现类对象),此时可以不传递实现类对象,传递一个匿名内部类
普通类也可以,匿名内部类就等于是普通类的子类
创建内部类的时候,系统会自动帮我们创建一个内部类对象,并且只创建一次
优点 : 少定义一个类
缺点 : 无法重复使用
不能有静态声明,但是可以声明常量
静态变量和静态方法不能声明
不能直接访问外部类的成员属性
类名 : 外部类$1 , 外部类$2 以此类推
一般应用于 : 方法调用时,传递参数, 方法参数一般是一个接口
设计模式:
概述:
就是在编码实践中,程序员发现有很多编码方式经常被用到,于是总结出来形成固定写法,一般表示最佳实践,就是设计模式
单例模式:
就是让某个类只能被实例化一次,一般这个实例化对象由这个类去创建,然后提供一个公共的获取唯一对象的一个接口
根据对象创建时机不同,被分为两种方式
1 懒汉模式
类加载时创建对象,且以后每次调用类实现方法时得到的都是这个对象;
2 饿汉模式
第一次调用类实现方法时创建对象,且以后每次调用类实现方法时得到的都是这个对象;
工程模式:
把创建对象语句,封装到工厂类中,提供一个获取对象的方法即可
这样所有用到这个对象的地方,都去工厂中获取,把类之间的强依赖关系变弱,灵活度更高
定义一个用于创建产品的接口,由子类决定生产什么产品。
是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象