-
接口 (interface)
-
为什么使用接口:
- 如下案例:
-
实现防盗门功能:
-
定义两个抽象类,在子类继承的时候,根据Java单继承的规定,无法实现继承两个父类。未解决这样的设计逻辑,引入了接口。
-
- 如下案例:
-
java中如果有多个父类需要继承的时候,可以考虑使用接口进行实现;
- java中的接口具备广发的使用:
- 用法:
- 使用interface来修饰;
- 接口中可以包含多个方法,且方法跟抽象类中的抽象方法一致,可以不写实现,子类在实现的时候必须要实现代码逻辑;
- 子类实现接口使用implements关键字。
- 用法:
- java中的接口具备广发的使用:
-
接口特性:
- 接口不可以被实例化,即接口中的所有方法都是抽象方法;而且接口中所有方法的访问权限都是public,默认权限也是public;
- 实现类必须实现接口的所有方法;
- 实现类可以实现多个接口;
- 接口中的变量都是静态常量。
-
描述Usb功能:
-
使用接口实现防盗门功能:
-
接口中的相关规则总结:
- 接口中所有方法都是抽象的;
- 接口没有显示的将接口中的成员用public显示,但默认是public访问权限;
- 接口中变量默认用public static final标识,所以接口中定义的变量就是全局静态常量;
- 可以定义一个接口,用extends去继承一个已有的接口;
- 可以定义一个类,用implements去实现一个接口中所有方法;
- 可以定义一个抽象类,用implements去实现一个接口中部分方法;
抽象类和接口的区别
- 抽象类中的方法可以有抽象方法,也可以有普通方法,但是接口中只能包含抽象方法;
- 抽象类需要用abstarct关键字修饰,而接口需要用interface关键字修饰;
- 抽象类的子类需要用extends关键字继承抽象类,接口需要用implements来实现接口;
- 子类继承抽象类的时候必须要实现所有的抽象方法,普通方法可以不重写,而接口中所有的方法都必须实现;
- 抽象类可以定义成员变量,而接口只能定义静态常量;
- 抽象类在子类实现的时候是单继承,接口是多继承;
- 抽象类和接口都不能实例化,但是抽象类中可以有构造方法,而接口中不能有;
- 抽象类可以实现接口,并且不实现接口中的方法,而接口只能继承接口,不能实现接口。
内部类——成员内部类
-
把一个类定义在另一个类的内部称为内部类;
-
一个Java文件可以包含多个class文件,但是只能有一个public class;
-
使用:
-
创建内部类的时候,需要在内部类的前面添加外部类来修饰:
-
InnerClassDemo.InnerClass inner = new InnerClassDemo().new InnerClass();
-
-
特点:
- 内部类可以方便的访问外部类的私有属性;
- 外部类不能访问内部类的私有属性,如果在外部类创建了内部类的对象,可以通过对象访问;
- 内部类中不能定义静态属性;
- 如果外部类和内部类具有相同的成员变量或方法,内部类默认访问自己的成员变量或方法,如果要访问外部类的成员变量,需要使用this关键字。(外部类.this.成员变量或者方法)
-
-
在外部类访问内部类:
- 语法:
- 外部类 外部类对象 = new 外部类();
- 外部类.内部类 内部类对象 = 外部类对象.new 内部类();
- 语法:
-
匿名内部类:
- 适合只使用一次的类,安卓中使用的多;
- 当定义了一个类,实现了某个接口的时候,在使用过程中只需要使用一次,没有其他用途,考虑到代码编写的简洁,可以考虑不创建具体的类,而采用new interface(){添加未实现的方法};
-
内部静态类:
- 在类的内部使用static修饰的类称为静态内部类;
- 语法:
- new 外部类类名.内部类().方法名;
- 外部类类名.内部类 内部类对象名 = new 外部类类名.内部类类名();
-
方法内部类:
- 方法内部类是指:将内部类定义在外部类的方法中;
- 注意事项:
- 方法内部类不能在外部类的方法以外的地方使用,所以,方法内部类不能使用访问控制符和static修饰符;
- 只能在方法中创建对象,因此class的作用域就是当前方法;
-
相关文章: