类的最后一点点小尾巴
六、内部类
即在类中定义一个类
格式:
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();
}
匆忙的一天又结束啦!
祝各位学习愉快!