Java中的成员内部类、静态内部类和方法内部类
成员内部类
- 成员内部类创建对象必须使用外部类对象来创建内部类对象,而不能直接new内部类构造方法的方式创建;
//普通成员内部类创建对象,需通过外部类对象进行创建
demo01 de1 = new demo01();
DemoChild2 dc2 = de1.new DemoChild2();
-
外部类对象不能直接使用内部类的属性和方法,可先创建内部类对象并通过内部类对象访问;
-
当外部类与内部类有相同的变量或者方法,内部类对象默认访问自己的变量和方法,若要访问外部类的对象和方法,需以外部类名.this.变量或方法的方式访问。
//普通成员类调用外部类的成员变量和调用内部类的成员变量
System.out.println(demo01.this.age);
System.out.println(age);
静态内部类
静态内部类是 static 修饰的内部类,这种内部类的特点是:
1、 静态内部类不能直接访问外部类的非静态成员,但可以通过 new 外部类().成员 的方式访问
//静态内部类调用外部类和内部类的普通成员变量
System.out.println(new demo01().age);
System.out.println(age);
2、 如果外部类的静态成员与内部类的成员名称相同,可通过“类名.静态成员”访问外部类的静态成员;如果外部类的静态成员与内部类的成员名称不相同,则可通过“成员名”直接调用外部类的静态成员
//静态内部类调用外部类和内部类的静态成员变量
System.out.println(demo01.name);
System.out.println(name);
3、 创建静态内部类的对象时,不需要外部类的对象,可以直接创建 内部类 对象名= new 内部类();
DemoChild dc1 = new DemoChild();//静态内部类创建对象
方法内部类
方法内部类就是内部类定义在外部类的方法中,方法内部类只在该方法的内部可见,即只在该方法内可以使用。
//方法内部类
private void Show()
{
String name = "aaa";
int age = 25;
class DemoChild3{
// private String name = "aaa";
//private int age = 25;
private void print()
{
System.out.println(name);
System.out.println(age);
}
}
DemoChild3 dc3 = new DemoChild3();
dc3.print();
}
完整程序
package com.practice;
public class demo01 {
private static String name="Tom";
private int age = 21;
//静态内部类
public static class DemoChild{
static String name="Lucy";
int age = 19;
void Print()
{
//静态内部类调用外部类和内部类的静态成员变量
System.out.println(demo01.name);
System.out.println(name);
//静态内部类调用外部类和内部类的普通成员变量
System.out.println(new demo01().age);
System.out.println(age);
}
}
//成员内部类
public class DemoChild2{
int age = 20;
void Print()
{
//普通成员类调用外部类的成员变量和调用内部类的成员变量
System.out.println(demo01.this.age);
System.out.println(age);
}
}
//方法内部类
private void Show()
{
String name = "Anmi";
int age = 25;
class DemoChild3{
// private String name = "aaa";
//private int age = 25;
private void print()
{
System.out.println(name);
System.out.println(age);
}
}
DemoChild3 dc3 = new DemoChild3();
dc3.print();
}
public static void main(String []args)
{
DemoChild dc1 = new DemoChild();//静态内部类创建对象
//普通成员内部类创建对象,需通过外部类对象进行创建
demo01 de1 = new demo01();
DemoChild2 dc2 = de1.new DemoChild2();
dc1.Print();
dc2.Print();
de1.Show();
}
}
运行结果: