//外部类Outer
public class Outer {
private int a = 99; //外部类私有属性
public class Inner {
int b = 2 ;
public void test() {
System.out.println("访问外部类中的a:" + a);
System.out.println("访问内部类中的b:" + );
}
}
//测试成员内部类
public static void main (String[] args) {
Outer o = new Outer(); //创建外部类对象
Inner i = o.new Inner(); //使用外部类对象创建内部类对象
i.test(); //调用内部类对象的test方法
}
}
二、静态内部类
public class HelloWorld{
String name = "xx";
public static class Inner {
public void show() {
System.out.println("访问外部类中的name:" + new HelloWorl().name);
}
}
}
三、方法内部类
public class MOuter {
public void show() {
final int a = 25;
int b = 13;
class MInner {
int c = 2;
public void print() {
System.out.println("访问外部类方法中的常量a:" + a);
System.out.println("访问内部类的变量c:" + c);
}
}
MInner mi = new MInner();
mi.print();
}
public static void main(String[] args ) {
MOuter mo = new Mouter();
mo.show();
}
}
抽象类 & 接口
都是将方法抽象,让子类去实现。
抽象类进一步抽象后,就诞生了接口
接口是更纯粹的抽象类 ,没有成员属性和构造器,只留下了静态常量和方法,更能体现标准和规范的含义
异同
抽象类(abstract class)
接口(interface)
定义
包含抽象方法的类
主要是抽象方法和静态常量的类
组成
构造器
抽象方法
普通成员方法、成员变量
静态方法、静态变量
常量
静态常量
抽象方法
default方法、静态方法(Java 8)
私有方法(Java 9)
使用
子类继承抽象类(extends)
子类实现接口(implements)
关系
子类只能继承一个抽象类
抽象类可以实现多个接口
子类可以实现多个接口
接口不能继承类,但可以继承多个接口
选择
如果需要继承父类的成员变量,或者需要控制子类的实例化,则选择抽象类
优先选择接口,避免单继承的局限
public interface List<E> extends Collection<E> {
//...其他成员
default void sort(Comparator<? super E> c) {
//logic code
}
}