第一種
public class StaticInnerClassTest
{
public static void main(String[] args)
{
//聲明靜態內部類的方式。
StaticInnerClass.InnerClass inner = new StaticInnerClass.InnerClass();
inner.output();
}
}
class StaticInnerClass
{
private static int a = 4;
//靜態內部類只能訪問外部類的靜態成員變量和靜態方法。
public static class InnerClass
{
public void output()
{
System.out.println(a);
}
}
}
第二種
public class StaticInnerClassTest2 { public static void main(String[] args) { //靜態內部類的靜態方法,可以不用實例化靜態類而直接調用。 Animal.Cat.run(); Animal.Dog.run(); } }
class Animal { static class Cat { public static void run() { System.out.println("Cat is running"); } }
static class Dog { public static void run() { System.out.println("Dod is running"); } } } |
public class MemberInnerClassTest
{
public static void main(String[] args)
{
//成員內部類的定義方式
MemberInnerClass.InnerClass inner = new MemberInnerClass().new InnerClass();
inner.output();
}
}
class MemberInnerClass
{
private int a = 4;
public class InnerClass
{
private int a = 5;
public void output()
{
//在成員內部類調用外部類的成員,必須使用下面的方式
System.out.println(MemberInnerClass.this.a);
}
}
}
第三種
public class LocalInnerClassTest
{
public static void main(String[] args)
{
LocalInnerClass local = new LocalInnerClass();
local.doSomething();
}
}
class LocalInnerClass
{
public void doSomething()
{
// 如果在外部類的方法裏面定義一個變量,必須用fianl修飾,否則不能被局部內部類訪問。
final int a = 8;
//在方法裏聲明的類就是局部內部類
class InnerClass
{
public void test()
{
System.out.println(a);
}
}
//只能在方法裏實例化,並調用局部內部類的方法
new InnerClass().test();
}
}
第四種
public class AnonymousInnerClassTest { @SuppressWarnings("deprecation") public String getDate(Date date) { return date. }
public static void main(String[] args) { AnonymousInnerClassTest test = new AnonymousInnerClassTest();
//在這裏匿名內部類會隱式地繼承Date類,然後就可以重寫toLocaleString方法,從面改變它的行爲。 String str = test.getDate(new Date() { @Override @SuppressWarnings("deprecation") public String toLocaleString() { return this. } });
System.out.println(str); } } |
有了匿名內部類,我們在給組件註冊事件時就可以用更爲簡單的方式
public class SwingTest { public static void main(String[] args) { JFrame frame = new JFrame("Anonymous InnerClass EventListener");
JButton button = new JButton("Click me");
button.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { System.out.println("Welcome"); } });
frame.getContentPane().add(button);
frame.addWindowListener(new WindowAdapter() { @Override public void windowClosing(WindowEvent e) { System.exit(0); } });
frame.setSize(200,200);
frame.setVisible(true); } } |