类的最后一点点小尾巴

六、内部类

即在类中定义一个类

格式:

public class 类名
{
修饰符 class 类名//内部类
{

}
}

注意:、

内部类可以直接访问外部类的成员,包括私有成员;

而外部类若想要访问内部类的成员,必须创建对象

范例:
public class outer
{
private int num=10;
public class inner
{
public void show()
{
System.out.println(num);//直接访问
}
}
public void method()
{
inner i=new inner();//创建对象进行访问
i.show();
}
}
1、内部类的分类

根据位置不同:成员内部类局部内部类

成员内部类的使用:

第一种情况:
//测试类
public class test
{
    public static void main(String[] args)
    {
        outer.inner i=new outer().new inner();
        i.show();//内部类public,可以直接调用
    }
}
//内部类和外部类
public class outer
{
    private int num=11;
    private class inner
    {
        public void show()//当内部类public修饰时
        {
            System.out.println(num);
        }
    }
}

第二种情况:
    //测试类
    public class test
    {
        public static void main(String[] args)
        {
            animal a=new animal();//内部类private,无法直接调用
            a.method();
        }
    }
    //内部类和外部类
    public class outer
    {
       private int num=11;
       private class inner//当内部类被private所修饰时
        {
            public void show()
            {
                System.out.println(num);
            }
        }
        public void method()//外部类的某个成员函数
        {
            inner i=new inner();
            i.show();
        }
    }
2、局部内部类

即将内部类置于外部类的某个成员函数中

举例:

//测试类
public class test
{
    public static void main(String[] args)
    {
        outer o=new outer();
        o.method();
    }
}
//内部类和外部类
public class outer
{
    private int num=11;
    public void method()
    {
        class inner//局部内部类
        {
            public void show()
            {
                System.out.println(num);
            }
        }
        inner i=new inner();
        i.show();//不要忘记这个操作哦!
    }
}
3、匿名内部类

前提:存在一个或者接口

本质:是一个继承了该类或实现了该接口的子类的匿名对象

也是局部内部类的一种特殊形式

格式:

new 类名或接口名{
    重写方法;
}

范例:

//测试类
public class test
{
    public static void main(String[]args)
    {
        outer o=new outer();
        o.method();
    }
}
//内部类和外部类
public class outer
{
    public void method()
    {
       new inner()
       {
           public void show()
           {
               System.out.println("匿名内部类");
           }
       }.show();//调用内部类对象   且,该种调用方法对于仅仅调用一两次较为适用
    }
}
//接口类
public interface inner
{
    void show();
}


//多次调用时
//测试类
public class test
{
    public static void main(String[]args)
    {
        outer o=new outer();
        o.method();
    }
}
//内部类和外部类
public class outer
{
    public void method()
    {
       inner i=new inner()
       {
           public void show()
           {
               System.out.println("匿名内部类");
           }
       };
        i.show();//即为调用一次
    }
}
//接口类
public interface inner
{
    void show();
}
4、匿名内部类在开发中的使用
//测试类
public class test
{
public static void main(String[] args)
{
outer o=new outer();
o.method(
new jumpping()
{
public void jump()
{
System.out.println("猫可以跳高了");
}
});//调用更为简便
}
}
//内部类和外部类
public class outer
{
public void method(jumpping j)
{
    j.jump();
}
}
//接口类
public interface jumpping
{
void jump();
}

匆忙的一天又结束啦!

祝各位学习愉快!

posted @ 2022-05-03 21:56  yesyes1  阅读(17)  评论(0编辑  收藏  举报