java零基础学习第九天

今天我们主要学习面向对象的最后一个知识点:接口,以及常用的一些设计模式,内部类以及Lambda表达式。

一.接口

接口是一种特殊的抽象类

1.接口的优点:
定义开发规范;提高代码的复用性;解耦;多实现类只能单继承

2.公共的静态常量和方法
在jdk1.7及之前接口中只能存在公共的静态的常量+公共的抽象方法
1)公共的静态的常量:
public static final 数据类型 变量名=赋值;
修饰符可以省略,默认存在
2)公共的抽象的方法:
public abstract 返回值类型 方法名();
修饰符可以省略,默认存在
3)使用:
类名.常量名 |实现类名.常量名|实现类对象.常量名
实现类对象.方法名();

3.注意事项
1).定义接口interface关键字
2).抽象方法必须重写
3).接口如何使用:
具体的实现类去实现接口,重写里面的抽象方法 按需扩展
抽象 的实现类实现接口,重写部分抽象方法按需扩展
4).实现和继承很像,都能使用父类或者父接口中的功能
5).接口不能实例化
6).类只能继承类,继承只能单继承,类可以多实现接口,一个类可以实现多个接口
7).接口和接口之间只能继承不能实现,接口可以继承多个接口
8).避免实现的多个接口中存在同名方法

4.JDK1.8新增
1).default默认方法,是个具体的方法,只能通过实现类的对象使用
2).静态方法,只能在当前接口中使用,不能通过实现类使用

二.常用的设计模式

1.单例模式
类中只能有一个实例
1)饿汉式:无论是否使用,在类加载的时候先创建一个对象 线程安全的 --效率低
2)懒汉式:在使用的时候才创建对象,不适用不创建 线程不安全的–效率高,通过加锁控制

2.实现单例的步骤
1)私有的构造器
2)私有的静态的该类引用
3)公共的静态的访问方式

3.静态代理
1.代理角色,真实角色实现相同的接口|继承相同的父类
2.代理角色持有真是角色的引用
3.代理行为

4.简单工厂模式
1)工厂类角色:这是本模式的核心,含有一定的商业逻辑和判断逻辑,用来创建产品
2)抽象产品角色:它一般是具体产品继承的父类或者实现的接口。
3)具体产品角色:工厂类所创建的对象就是此角色的实例。在 Java 中由一个具体类实现。

5.内部类
在 Java 中,可以将一个类定义在另一个类里面或者一个方法里面,这样的类称为内部类。广泛意义上的内部类一般来说包括这四种:成员内部类、局部内部类、匿名内部类和静态内部类。
1)成员内部类
在外部类的成员位置,定义的类,叫做成员内部类
即是成员也是类,既有成员的特性,能够使用成员修饰符(public ,static…),既然是类就有类的特性,类之间可以继承,可以实现接口

内部类中可以 使用外部类中的内容,包括私有
在成员内部类中只能定义静态的常量,其他静态内容不可以
在外部类中通过内部类的对象使用内部类中的内容
内部类编译后使用$表示
在其他类中如何使用内部类中的内容:

外部类  引用 = new 外部类();
外部类.内部类  引用 =引用.new 内部类();
外部类.内部类  引用 =new 外部类().new 内部类();

2)静态内部类
如果用 static 将内部类静态化,那么内部类就只能访问外部类的静态成员变量,不能直接访问外部类的实例变量、实例方法,只有通过对象引用才能访问。
其次,因为内部类被静态化,因此 Out.In 可以当做一个整体看,可以直接 new 出内部类的对象(静态内部类不通过外部类实例进行创建对象)
3)局部内部类
将内部类移到了外部类的方法中,然后在外部类的方法中再生成一个内部类对象去调用内部类方法。局部内部类和成员内部类的区别在于局部内部类的访问仅限于方法内
如果此时我们需要往外部类的方法中传入参数,那么外部类的方法形参必须使用 final定义
局部内部类:像局部变量一样,不能被 public, protected, private 和 static 修饰。
4)匿名内部类
匿名内部类:定义类的最终目的是创建一个类的实例,但是如果某个类的实例只是用一次,则可以将类的定义与类的创建,放到与一起完成,或者说在定义类的同时就创建一个类 , 以这种方法定义的没有名字的类成为匿名内部类。 声明和构造匿名内部类的一般格式如下:

new ClassOrInterfaceName(){
/*类体*/
}

1.匿名内部类可以继承一个类或实现一个接口,这里的 ClassOrInterfaceName 是匿名内部类所继承的类名或实现的接口名。但匿名内部类不能同时实现一个接口和继承一个类,也不能实现多个接口。如果实现了一个接口,该类是 Object 类的直接子类,匿名类继承一个类或实现一个接口,不需要 extends 和 implements 关键字。
2.由于匿名内部类没有名称,所以类体中不能定义构造方法,由于不知道类名也不能使用关键字来创建该类的实例。实际上匿名内部类的定义、构造、和第一次使用都发生在同样一个地方。此外,上式是一个表达式,返回的是一个对象的引用,所以可以直接使用或将其复制给一个对象变量

三.Lambda表达式

Lambda是JDK1.8新增的内容,目的是简化匿名内部类
1.表达方式
()->{}:(): 抽象方法的参数列表;->:箭头函数,箭头符号,具有上下文推倒的作用;{}:抽象方法的方法体。

2.前提:函数式接口
函数式接口:只有一个抽象方法的接口,叫做函数式接口
检测是否为函数式接口: @FunctionalInterface

猜你喜欢

转载自blog.csdn.net/qq_35901141/article/details/89857626