疯狂java


您现在的位置: 疯狂软件 >> 新闻资讯 >> 正文

各种Java内部类的总结


 

 
面向对象程序设计中,可以在一个类的内部定义另一个类,这个类叫做内部类。内部类分为3种,成员内部类,局部内部类和匿名内部类。
 
成员内部类
 
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();
    }
}
复制代码