您的位置:首页 > 编程语言 > Java开发

JavaSE——面向对象:内部类

2018-01-13 00:00 218 查看
内部类:定义在一个类内部的类,也称嵌套类。











实例内部类:



实例内部类程序示例:

import mypro01.Outter.Inner;

class Outter{	//外部类
int age=2;
String sex="mail";
public void doWorkOut(){
System.out.println("我是外部类方法");
}

class Inner{	//内部类

int age=12;
String name;
public void doWorkIn(){	//内部类方法
doWorkOut(); 	//内部类可直接访问外部类方法

//内部类访问外部类同名和不同名成员的方法
System.out.println("内部类可直接访问外部类成员"+sex);
System.out.println("内部类可访问外部类同名成员age :"+Outter.this.age);
System.out.println("内部类的age和name: "+this.age+" "+this.name);
}
}
}
public class InnerClass {

public static void main(String[] args) {

System.out.println("**************外部类对象测试*****************");
Outter out1= new Outter();
System.out.println(out1.age);
System.out.println(new Outter().age);

System.out.println("**************内部类对象测试*****************");
Inner in1= new Outter().new Inner();	//内部类定义方法
Inner in2=out1.new Inner();				//内部类定义方法
System.out.println(in1.name);
System.out.println(in2.name);
System.out.println(in2.age);

System.out.println("**************内部类方法测试*****************");
in1.doWorkIn();

}

}

实例内部类程序示例运行结果:

**************外部类对象测试*****************
2
2
**************内部类对象测试*****************
null
null
12
**************内部类方法测试*****************
我是外部类方法
内部类可直接访问外部类成员mail
内部类可访问外部类同名成员age :2
内部类的age和name: 12 null

静态内部类



静态内部类程序示例:

import mypro01.Outter.Inner;

class Outter{	//外部类
int age=2;
static String sex="mail";
public void doWorkOut(){
System.out.println("我是外部类非静态方法");
}

static public void doWorkOut2(){

System.out.println("我是外部类静态方法");
}

static class Inner{	//内部类

int age=12;
String name;
public void doWorkIn(){	//内部类方法

//静态内部类可直接访问外部类静态成员(字段和方法),但无法直接访问外部类非静态成员。
System.out.println("静态内部类可直接访问外部类静态成员"+sex);
doWorkOut2();

//静态内部类访问外部类非静态成员(字段和方法)时,需通过外部类实例去访问。
System.out.println("静态内部类访问外部类非静态成员age :"+new Outter().age);
new Outter().doWorkOut();

System.out.println("内部类的age和name: "+this.age+" "+this.name);
}
}
}
public class InnerClass {

public static void main(String[] args) {

System.out.println("**************外部类对象测试*****************");
Outter out1= new Outter();
System.out.println(out1.age);
System.out.println(new Outter().age);

System.out.println("**************内部类对象测试*****************");
Inner in1= new Inner();	//静态内部类在创建实例时,不必创建外部类实例
Outter.Inner in2= new Outter.Inner();
System.out.println(in1.name);
System.out.println(in2.name);
System.out.println(in2.age);

System.out.println("**************内部类方法测试*****************");
in1.doWorkIn();

}

}

静态内部类程序运行示例:

**************外部类对象测试*****************
2
2
**************内部类对象测试*****************
null
null
12
**************内部类方法测试*****************
静态内部类可直接访问外部类静态成员mail
我是外部类静态方法
静态内部类访问外部类非静态成员age :2
我是外部类非静态方法
内部类的age和name: 12 null

局部内部类(注意区别局部内部类和成员内部类)

局部内部类属于方法中的类。

成员内部类是属于类中的类。



局部内部类程序示例:

局部内部类程序示例运行结果:

匿名内部类



匿名内部类程序示例:

匿名内部类程序运行结果:
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: