java学习之路 之 高级类特性2-类的成员之五:内部类

    xiaoxiao2025-03-31  13

    类的成员之五:内部类 在Java中,允许一个类的定义位于另一个类的内部,前者称为内部类,后者称为外部类。 Inner class一般用在定义它的类或语句块之内,在外部引用它时必须给出完整的名称。 Inner class的名字不能与包含它的类名相同;

    Inner class可以使用外部类的私有数据,因为它是外部类的成员,同一个类的成员之间可相互访问。而外部类要访问内部类中的成员需要:内部类.成员或者内部类对象.成员。

    分类: 成员内部类(static成员内部类嵌套类和成员内部类) 局部内部类(不谈修饰符)、匿名内部类

    内部类举例:

    public class A{ private int s = 111; public class B { private int s = 222; public void mb(int s) { System.out.println(s); // 局部变量s System.out.println(this.s); // 内部类对象的属性s System.out.println(A.this.s); // 外层类对象属性s } } public static void main(String args[]){ A a = new A(); A.B b = a.new B(); b.mb(333); } }

    内部类特性: Inner class作为类的成员: 可以声明为final的。 和外部类不同,Inner class可声明为private或protected; Inner class 可以声明为static的,但此时就不能再使用外层类的非static的成员变量; Inner class作为类:可以声明为abstract类 ,因此可以被其它的内部类继承 【注意】非static的内部类中的成员不能声明为static的,只有在外部类或static的内部类中才可声明static成员。

    匿名内部类: 匿名内部类不能定义任何静态成员、方法和类,只能创建匿名内部类的一个实例。一个匿名内部类一定是在new的后面,用其隐含实现一个接口或实现一个类。 new 父类构造器(实参列表)|实现接口(){ //匿名内部类的类体部分 }

    interface A{ public abstract void fun1(); } public class Outer{ public static void main(String[] args) { new Outer().callInner(new A(){//接口是不能new但此处比较特殊是子类对象实现接口,只不过没有为对象取名 public void fun1() { System.out.println(“implement for fun1"); } }); // 两步写成一步了 } public void callInner(A a) { a.fun1(); } } class Test { public Test() { Inner s1 = new Inner(); s1.a = 10; Inner s2 = new Inner(); s2.a = 20; Test.Inner s3 = new Test.Inner(); System.out.println(s3.a); } class Inner { public int a = 5; } public static void main(String[] args) { Test t = new Test();//5 Inner r = t.new Inner(); System.out.println(r.a);//5 } }
    转载请注明原文地址: https://ju.6miu.com/read-1297587.html
    最新回复(0)