内部类/匿名内部类:
- 内部类访问规则: 内部类可以直接访问外部类中的成员,包括私有( 内部内可以直接访问外部类的原因:有默认的前缀
OutClass.this.x) 外部类想要访问内部类.需要建立内部类的对象- 注:当内部类中定义了静态成员,该内部类必须是静态内部类
当外部类静态方法访问内部类,该内部类也必须是静态的
内部类代码演示-----
//外部类
class OutClass{
int x=1;
public void method_1(){
InClass in= new InClass(); //外部类访问内部类必须建立内部类对象
in.methodIn();
}
//内部类
class InClass{
public void methodIn(){
System.out.println(x);
System.out.println("内部类方法");
}
}
public class DEMO {
public static void main(String[] args) {
OutClass out=new OutClass();
out.method_1();
OutClass.InClass i=new OutClass().new InClass(); //直接创建内部类对象,一般不用
i.methodIn();
}
}
静态内部类代码演示-----
class OutClass{
static int y=1;
public void method_1(){
InClass1 in= new InClass1(); //外部类访问内部类必须建立内部类对象
in.method2();
InClass1.method1();
}
//静态内部类 ---一般少用
static class InClass1{
public static void method1(){ //静态方法
System.out.println(y);
}
public void method2(){ //非静态方法
System.out.println(y);
}
}
}
public class DEMO {
public static void main(String[] args) {
OutClass.InClass1.method1(); //直接访问静态类中静态成员
new OutClass.InClass1().method2(); //直接访问静态类中非静态成员
}
匿名内部类:
- 匿名内部类其实就是内部类的简写格式
- 定义匿名内部类前提:该内部类必须是继承一个类或者实现接口
- 匿名内部类格式:new 父类或接口(){定义子类内容}
- 其实匿名内部类就是一个匿名子类对象
代码演示-----
//接口
interface inter{
void method();
}
//外部类
class OutClass{
public void function(){
//匿名内部类写法
new inter(){
public void method(){
System.out.println("实现接口");
}
}.method();
}
/* 这是非匿名的写法
内部类实现接口
class InClass implements inter{
public void method(){
System.out.println("实现接口");
}
}
public void function(){
new InClass().method();
}
*/
}
趣味题:
//接口
interface inter{
void method();
}
class test{
//补足代码..通过匿名内部类
}
public class DEMO {
public static void main(String[] args) {
test.function().method(); //function方法返回的必须是inter子类对象.这样就可以直接调用method
}
}
答案-----
class test{
public static inter function (){
return new inter(){
public void method(){
System.out.println("run");
}
};
}
}