1.普通内部类
- 普通内部类可以访问外部类的一切属性和方法
- 内部类可以自由继承需要继承的接口和类
- 内部类向上转型为一个基类和一个接口的时候可以很很方便的隐藏实现细节
//要用到的接口
public interface Destination {
String readLabel();
}
public interface Contents {
int value();
}
//实现类
class Parcel4{
private class PContents implements Contents {
private int i = 11;
public int value (){
return i;
}
}
protected class PDestination implements Destination {
private String label;
private PDestination(String whereTo){
label =whereTo;
}
public String readLabel(){
return label;
}
}
public Destination destination(String s){
return new PDestiantion(s);
}
public Contents contents(){
return new PContents();
}
}
public class TestParcel{
public static void main(String[] args){
Parcel4 p = new Parcel4();
Contents c = p.contents();
Destination d = p.destination("Tasmania");
}
}
2.嵌套类
- 嵌套类又称静态内部类
- 嵌套类的创建不依赖于外部类的对象
- 嵌套类里不能直接访问外部类的非static实例成员变量,和非static方法
- 嵌套类访问外部类成员变量
- 通过在静态内部类里面创建一个构造函数,往构造函数里面里面传入外部类对象,利用该对象访问外部成员变量。
class OuterClass{
int a;
static class InnerClass{
OuterClass o1 ;
public InnerClass(OuterClass o2) {
o1=o2;
}
public void show(){
System.out.println(o1.a);
}
}
}
public class Day8_2 {
public static void main(String[] args) {
Day8_2 d = new Day8_2();
OuterClass o2 = new OuterClass();
OuterClass.InnerClass in2 = new OuterClass.InnerClass(o2);
}
}