1.嵌套类,内部类
嵌套类是指被定义在一个类内部的类;
JAVA的嵌套类有很多种类:1.静态成员类;2.非静态成员类;3.匿名类;4.局部类;其中,除了静态成员类之外,其他的都是内部类,因为静态成员类更像是一个独立的类;
但是静态成员类,是外部类内部的一个成员,静态成员类的访问和其他的静态成员一样:1.通过外部类类名调用;2.如果静态成员类定义为私有,那么只能在外部类内部使用
JAVA 内部类可以很好的实现隐藏,并且内部类拥有外围类的所有元素的访问权限,可是实现多重继承,并且可以避免修改接口而实现同一个类中两种同名方法的调用。
内部类有以下特点:
1.内部类中如果有static的属性,或者方法,那么这个内部类必须是static class;
2.一个内部类是static内部类,可以有非static的方法和属性;
2.外部类和内部类
2.1.外部类访问内部类的属性或方法
可以通过new 对象,外部类可以调用内部类的所有域的属性和方法;
public class Outer { private String name = "张三"; public int age = 10; private void outerMethod(){ Inner inner = new Inner(); int age = inner.innerAge; String name = inner.innerName; inner.innerMethod(); System.out.println("outer method"); } class Inner{ private String innerName = "Inner"; public int innerAge = 14; public void innerMethod(){ System.out.println("inner start"); System.out.println("inner end"); } }
2.2.内部类访问外部类的方法和属性
可以通过 外部类.this.内部类方法(属性)的方式调用所有域的属性和方法
public class Outer { private String name = "张三"; public int age = 10; private void outerMethod(){ System.out.println("outer method"); } class Inner{ public void innerMethod(){ System.out.println("inner start"); Outer.this.outerMethod(); String name = Outer.this.name; int age = Outer.this.age ; System.out.println("inner end"); } } }
2.3 内部类调用内部类
和外部类调用内部类一样,用 new 对象的形式,可以访问另一个内部类的所有域属性和方法;
3.如何调用用一个类的内部类
一般通过两种方式:第一种:new outer().new inner();第二种:new outer().getInner();通过方法获取;
public class Outer { public Inner getInner(){ return new Inner(); }; class Inner{ private String innerName = "Inner"; public int innerAge = 14; } } class Test{ public static void main(String[] args) { Outer.Inner inner = new Outer().new Inner(); Outer.Inner inner1 = new Outer().getInner(); } }
参考资料:《effective java》