1,用法:
public class Line //直线类,外层类型
{ ……
class Point{
//点类,内嵌类型
……
}
……
}
2,作为类型的特性:
1)内嵌类型不能与外层类型同名。
2)内部类中可以声明成员变量和成员方法。
3)内部类可以继承父类或实现接口。
4)内部类可以声明为抽象类或内部接口,但必须被其他内部类继承或实现
3,作为成员的特性
1)使用点运算符“.”引用内嵌类型:外层类型.内嵌类型 ( Line.Point )
2)与其他外层类型彼此信任,能访问对方的所有成员
3)具有类中成员的4种访问控制权限。
4)内部接口总是静态的,可声明内部类是静态的,静态内部类能够声明静态成员,但不能引用外部类的实例成员。非静态内部类不能声明静态成员。
//内部类中外部类的一个成员,它的使用方式和其它成员(变量或方法)类似,,
//注意,内部类可以访问外部类的私有成员
public class Line {
int length;
private Point start;
private Point end;
static int val;
//非静态内部类
class Point{
private int x;
private int y;
public Point(int x, int y) {
this.x = x;
this.y = y;
}
public Point() {
super();
// TODO Auto-generated constructor stub
}
public void abc(){
start=null;
}
}
//静态内部类
static class A{
int a=5;
public void aa(){
System.out.println("1111");
}
}
interface Direction{
public static final int UP=1;
public static final int DOWN=2;
public static final int LEFT=3;
public static final int RIGHT=4;
}
@Override
public String toString() {
return "Line [length=" + length + ", start=" + start + ", end=" + end
+ "]";
}
public void fun(){
int x = Direction.DOWN;
}
}
public class Demo {
@SuppressWarnings("unused")
public static void main(String[] args) {
//1非静态内部类的访问方式: 类型为"外部类名.内部类名",创建时为"对象名.new 内部类构造方法名"
Line line = new Line();
System.out.println(line.length);//成员变量
Line.Point p = line.new Point();//内部类
//2静态内部类的访问方式: 外部类名.内部类名
Line.val = 10; //成员变量
Line.A a = new Line.A();
}
}