java各种内部类
成员内部类
1.成员内部类位于一个类内部的成员位置,可以访问外部类中私有化的变量,方法等。
2.成员内部类可以被私有化或者静态,静态内部类只能访问外部类中静态的成员。私有化封装的内部类只能通过外部类的成员访问。具体知识点用代码演示。
package 面向对象; //成员内部类。 class Person { int a=6; class Hand { int a=5; public void test_1() { int a=4; System.out.println(Person.this.a);//外部类变量用类名.this修饰。 System.out.println(this.a);//内部类变量用this修饰。 System.out.println(a);//内部类的方法内的变量不用修饰。 } } } public class Test_5 { public static void main(String[] args) { Person.Hand c= new Person(). new Hand();//注意直接创建内部类对象的格式。 //如果内部类为静态则创建方式为:Person.Hand c=new Person. Hand(); c.test_1(); } }
局部内部类
局部内部类一般位于外部类的成员方法中。局部内部类不能私有化和静态化。具体知识点如下:
package 面向对象; //局部内部类。 class Outer { private int a=5; public void run() { class Inner//局部内部类不能用static,private修饰。 { //final int c=30 //局部内部类使用局部变量必须加final。(jdk8以前) public void run_1(final int c) { System.out.println(Outer.this.a); System.out.println(c); } } Inner i=new Inner();//局部内部类完成后需要创建对象。 i.run_1(30); } } public class InnerTest { public static void main(String[] args) { Outer o=new Outer(); o.run(); } }
匿名内部类
使用匿名内部类我们必须要继承一个父类或者实现一个接口,当然也仅能只继承一个父类或者实现一个接口。同时它也是没有class关键字,这是因为匿名内部类是直接使用new来生成一个对象的引用。
具体知识点如下
package 面向对象; interface Inter { public abstract void method(); } class Test_6 { public static Inter function() { return new Inter()//这里的内部类实现了inter接口,重写了method方法。 { public void method() { System.out.println("haha"); } }; } } public class InnerClassTest { public static void main(String[] args) { Test_6.function().method(); } }