public修饰的成员内部类
/**
* 成员内部类访问外部类成员变量:直接访问
*
*
* @author Administrator
*
*/
class Outer{
private int num=3;
public void method() {
System.out.println("method()");
}
public void show1() {
Inner in = new Inner();
in.show();
}
class Inner{
int num = 40;
public void show() {
int num = 20;
method();
System.out.println(num);//局部变量
System.out.println(this.num);//内部成员变量
System.out.println(Outer.this.num);//内部类访问外部类私有成员
}
}
}
public class Demo {
public static void main(String[] args) {
// TODO Auto-generated method stub
//创建内部类格式
Outer out = new Outer();
Outer.Inner in=out.new Inner();//用外部类创建的对象创建内部类对象
in.show();
}
}
运行结果
private修饰的成员内部类
/**
* 成员内部类可以用private修饰:此类只能在外部类使用
*
*
* @author Administrator
*
*/
class Outer1{
private class Inner1{
public void show() {
System.out.println("show()");
}
}
//外部类访问private修饰的内部类show方法
public void method() {
Inner1 in = new Inner1();
in.show();
}
}
public class Demo2 {
public static void main(String[] args) {
// TODO Auto-generated method stub
new Outer1().method();
}
}
运行结果
局部内部类
/**
* 局部内部类:
*
*
* @author Administrator
*
*/
class Outter3 {
private int age = 12;
public void Print(final int x) { //这里局部变量传参x必须设置为final类型!如果不设置自动为final
class Inner {
public void inPrint() {
System.out.println(x);//输出传的参数x的值
System.out.println(age);//输出外部类私有变量age
}
}
new Inner().inPrint();//局部内部类只能在当前局部创建对象
}
}
public class Demo3 {
public static void main(String[] args) {
Outter3 out = new Outter3();
out.Print(10);
}
}
运行结果
静态内部类
/**
* 静态内部类:
*
*
* @author Administrator
*
*/
class Outter4 {
private static int age = 12;
static class Inner {//静态内部类
public void print() {
System.out.println(age);//静态内部类访问外部静态成员变量
}
}
}
public class Demo4 {
//Outter4.Inner 当做一个整体来使用的
public static void main(String[] args) {
Outter4.Inner in = new Outter4.Inner();//可直接用外部类创建静态内部类对象
in.print();
//比较之前创建成员内部类对象如下所示
// Outter out =new Outter();
//Outter.Inner in=out.new Inner();
//in.show();
}
}
运行结果
匿名内部类
/**
* 匿名内部类:
* 格式:
* new 接口名或抽象类名(){
* 重写或实现方法
* }
* @author Administrator
*
*
*/
interface Fu{//定义接口
public void method();//抽象方法
}
class Zi{//定义外部类
public void show() {
//匿名内部类
//new 接口名 其实new的是实现类对象或子类对象
new Fu() {//匿名内部类
@Override
public void method() {
// TODO Auto-generated method stub
System.out.println("method()");
}
}.method();//实现类调用method()方法
}
}
public class Demo5 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Zi z=new Zi();//创建外部类对象
z.show();//z对象调用show()方法
}
}
运行结果