-
枚举enum (掌握)
1.1. 概念:就是一种跟类平级的新结构
1.2. 作用:就是简化类中全局常量这种代码
1.3. 语法:
声明语法:
public enum 枚举类名字{
字段(全大写、下划线。简化的就是全局常量)
实例变量(尽量是private final修饰的)
实例方法
类方法
构造方法 - 枚举中的构造方法默认都是private修饰,不能够是public,protected修饰
构造方法作用:只能在当前枚举类中使用,就是给当前枚举类对象初始化实例变量的
}1.4. 注意:
1.4.1. 字段之间用逗号,最后一个字段用分号结束
1.4.2. 可以写中文字段,但是不建议
1.4.3. 枚举类都会隐式继承了Enum类(所有枚举类的基类),不能显示写出extends来
1.4.4. 构造方法必须是private的1.5. 使用场景:
适用于一些取值固定的情况。例如:Vip、性别、QQ状态、星座、季节。。。。 -
抽象abstract (重点)
2.1 抽象方法 abstract 方法
1. 概念:就是没有任何方法体,且用abstract修饰的方法,()后用分号。
2. 语法:
修饰符 abstract 返回值类型 方法名(…); -
作用:从语法层面强制所有的子类重写该方法,保证业务逻辑的合理性
2.2 抽象类 abstract修饰的类
1. 概念:抽象类 abstract修饰的类,是一种新结构。
2. 抽象类作用:就是用来装抽象方法的。
3. 语法:
命名一般类名AbstractXxx
修饰符 abstract class AbstractXxx{
实例变量
类变量
实例方法
类方法
构造方法 // 语法规定:抽象类不能创建对象。只能在子类中通过super使用
抽象方法:修饰符 abstract 返回值类型 方法名(…);
}
4. 抽象类的使用场景: 一般作为业务父类(基类,模板类),且业务父类中,
有的方法需要所有子类强制重写。例如,模板方法模式。
5. 注意事项:- 语法规定:抽象类不能创建对象。只能在子类中通过super使用
- 使用场景
-
接口 interface (重点)
3.1 概念:是一种新结构,跟类平级。是一种标准,只要达到标准就具有这个接口的功能。3.2 作用:提高程序的扩展性。因为在java中是单继承,而 多实现(接口)
3.3 语法:
3.声明语法:
public interface I接口名{
全局常量;//默认都会有一个public static final修饰成员变量 //调用方式:只能是通过: 接口名.常量名;抽象方法;
//从jdk1.7开始有的 public default 返回值类型 方法名(...){ //调用方式:只能是通过 实现类对象.方法名(...); } //从jdk1.7开始有的 public static 返回值类型 方法名(...){ //调用方式:只能是通过: 接口名.方法名(...); } }
3.4 注意事项
1. 接口命名规则:IXxx
2. 接口实现类命名规则:接口名Impl
3. 接口中没有构造方法,也不能new对象
4. 如果接口中只有一个抽象方法,该接口就是函数式接口,函数式接口可以用@FunctionalInterface
注解修饰,函数式接口可以使用jdk8新特性lambda表达式。
5. 只要一个接口中只有一个抽象方法,不管有没有@FunctionalInterface,该接口都是函数式接口。
6. 接口必须被子类通过implements全部实现其内的抽象方法3.5 类、接口关系
类和类:单继承
类和接口:多实现
接口和接口:多继承当即需要继承一个类,又需要实现一些接口的时候,亲爹在前,干爹在后。 语法: public (abstract) class (Abstract)Father{} public interface A{} public interface B extends A{} public interface C{} public interface D extends B,C{}//接口和接口:多继承 public class Son extends Father implements B,C,D{ //必须重写全部的抽象方法 }
3.6 接口的使用场景:
能用接口就不要用抽象类,因为java中都是单继承多实现的。 一般的特殊(扩展、额外)功能
都是用接口完成的
-
内部类(inner class)(了解)
-
概念:把一个类定义在另外一个类的内部,嵌套类,宿主类。
生成内部类名字:外部类$内部类.java -
作用: 就是保护数据,相当于封装
-
案例:手机和手机卡
-
-
匿名内部类:Anonymous Inner Class(了解)
使用一个接口或者抽象类的时候,传统做法是写一个类实现该接口或者是继承该抽象类
但是,如果当前实现类对象只使用一次,再去设计这个实现类,就会比较麻烦,
这时候可以使用匿名内部类来简化设计类的工作。其实就是将 设计实现类的工作交给编译器完成。匿名内部类语法:
接口名/抽象类名 父类变量 = new 接口/抽象类(){//这里是多态的方式接受子类对象(这个子类的名字我们不知道,是编译器起的名字)
//重写全部抽象方法
}父类变量.抽象方法名(…);