千家信息网

Java内部类在GUI设计中的作用是什么

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,这篇文章主要讲解了"Java内部类在GUI设计中的作用是什么",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"Java内部类在GUI设计中的作用是什么"吧
千家信息网最后更新 2026年10月31日Java内部类在GUI设计中的作用是什么

这篇文章主要讲解了"Java内部类在GUI设计中的作用是什么",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"Java内部类在GUI设计中的作用是什么"吧!

Java内部类其实在J2EE编程中使用较少,不过在窗口应用编程中特别常见,主要用来事件的处理。其实,做非GUI编程,内部类完全可以不用。

内部类的声明、访问控制等于外部类有所不同,要灵活使用内部类来编写程序,还是有相当难度的,Java发明了这种难懂的玩意儿,在其他语言中是没有的,但是在Java中,内部类也相当的重要,尤其做GUI开发时候,事件的响应处理全靠内部类了。

内部类所做的功能使用外部类也同样可以实现,只是有时候内部类做的更巧妙些。

内部类按照其所在位置不同,可分为以下几种:

1、(普通的)内部类(最常见的内部类,内部类的定义与类成员平级,)

2、方法内部类

3、匿名类

4、静态内部类

5、接口内部类

一、内部类声明与访问

1、内部类直接在类的内部进行声明。可以声明为private、protected、public或者默认访问权限,这个访问权限约定和外部类完全一样。

2、内部类自动拥有对其外围类所有成员(方法、属性)的访问权。如果内部类和外部类成员的名字完全相同,在内部类方法中要访问外部类成员,则需要使用下面的方式来访问:外部类名.this.外部成员名,例如Outer.this.i++; (看例子)

3、必须使用外部类对象来创建内部类对象,而不是直接去new一个。

格式为:外部对象名.new 内部类构造方法

比如要创建一个内部类iner对象,需要这么做:

 Outer outer = new Outer();           Outer.Inner iner = outer.new Inner();    /**   * 内部类创建与初始化   *   * @author leizhimin 2009-7-17 13:51:52   */   public class Outer {           private int i = 10;           private int y = 8;            Outer() {                   System.out.println("调用Outer构造方法:outer");           }            public void sayMsg() {                   System.out.println("Outer class!");           }            class Inner {                   int i = 1000;                    Inner() {                           System.out.println("调用Inner构造方法:inner");                   }                    void innerMsg() {                           System.out.println(">>>>>Inner class!");                           sayMsg();                           //访问内部类自己的成员i,也可以写成 this.i++                           this.i++;                           //访问外部类的成员 i和y                           Outer.this.i++;                           y--;                   }                    int getI() {                           return i;                   }           }            public void test() {                   Inner in = new Inner();                   in.innerMsg();           }            public int getI() {                   return i;           }            public void setI(int i) {                   this.i = i;           }   }    class Test1 {           public static void main(String[] args) {                   Outer outer = new Outer();                   outer.test();                   System.out.println(outer.getI());                   System.out.println("-------1--------");                    Outer.Inner iner = outer.new Inner();                   iner.innerMsg();                   System.out.println(iner.getI());                   System.out.println("-------2--------");                    System.out.println(outer.getI());           }   }

运行结果:

调用Outer构造方法:outer

调用Inner构造方法:inner

>>>>>Inner class!   Outer class!   11   -------1--------

调用Inner构造方法:inner

>>>>>Inner class!   Outer class!   1001   -------2--------   12    Process finished with exit code 0

二、内部类与接口

1、内部类可以实现接口。

2、内部类之间相互可见,但并非内部类之间方法都可见。

public interface Foo{            void say();   }    public interface Bar {           void readme();   }    /**   * 内部类实现接口   *   * @author leizhimin 2009-7-17 14:57:50   */   public class Test2 {           public static void main(String[] args) {                   Outer outer = new Outer();                   Foo f = outer.genFoo();                   Bar b = outer.genBar();                   f.say();                   b.readme();           }   }    class Outer {           private class FooImpl implements Foo {                   public void say() {                           System.out.println("say foo!");                   }           }            private class BarImpl implements Bar {                   public void readme() {                           System.out.println("say bar!");                   }           }            public Foo genFoo() {                   return new FooImpl();           }            public Bar genBar() {                   return new BarImpl();           }   }

输入结果:

say foo!

say bar!

Process finished with exit code 0

三、访问权限

外部类分两种:

一种嵌入了内部类声明代码外部类,称为直接外部类。 另一种是与内部类没有任何关系的外部类,称为外部类。

在同一个直接外部类中,内部类之间所有的方法都是相互可见的,包含在直接外部类的main()中可见。

在外部类中,要看到一个类的内部类成员,则至少要求这个内部类的class和成员权限大于或等于protected。

/**   * 内部类实现接口   *   * @author leizhimin 2009-7-17 14:57:50   */   public class Test2 {           public static void main(String[] args) {                   Outer o = new Outer();                   Outer.Bar b = o.genBar();                   b.readme();           }   }    class Outer {            protected class Foo {                   protected void say() {                           System.out.println("say foo!");                   }                    private void test() {                           System.out.println("----test------");                   }           }            protected class Bar {                   protected void readme() {                           System.out.println("say bar!");                           new Foo().test();                   }           }            public Foo genFoo() {                   return new Foo();           }            public Bar genBar() {                   return new Bar();           }   }

四、方法内部类

方法内部类只在该方法内部可见,方法内部类可以定义在方法中的任何位置。

/**   * 内部类实现接口   *   * @author leizhimin 2009-7-17 14:57:50   */   public class Test2 {           public static void main(String[] args) {                   Outer outer = new Outer();                   Foo f = outer.genFoo();                   Bar b = outer.genBar();                   f.say();                   b.readme();           }   }    class Outer {           public Foo genFoo() {                   //方法内的内部类                   class FooImpl implements Foo {                           public void say() {                                   System.out.println("say foo!");                           }                   }                   return new FooImpl();           }            public Bar genBar() {                   Bar b = null;                   if (true) {                           //任意位置的内部类                           class BarImpl implements Bar {                                   public void readme() {                                           System.out.println("say bar!");                                   }                           }                           b = new BarImpl();                   }                   return b;           }   }

运行结果:

say foo!

say bar!

Process finished with exit code 0

五、匿名类

匿名类不给出类名,直接定义一个类,通常这个类实现了某种接口或者抽象。匿名类的访问权限更没有讨论价值了,看个例子就行了。

在一些多线程程序中比较常见,有点变态,呵呵。

/**   * 匿名类.   *   * @author leizhimin 2009-7-17 15:56:17   */   public class Test3 {           public Foo f = new Foo() {                   public void say() {                           System.out.println("O(∩_∩)O哈哈~!");                   }           };            public Foo test() {                   return new Foo() {                           public void say() {                                   System.out.println("say foo!");                           }                   };           }            public static void main(String[] args) {                   Test3 t = new Test3();                   t.f.say();                   t.test().say();           }   }    interface Foo {           void say();   }

运行结果:

say foo!

Process finished with exit code 0    /**   * 普通类的匿名初始化   *   * @author leizhimin 2009-7-17 16:13:31   */   public class Fk {           private String x;            public Fk(String x) {                   this.x = x;           }            @Override           public String toString() {                   return "Fk{" +                                   "x='" + x + '\'' +                                   '}';           }   }    class Test4 {           public Fk hehe() {                   //把后面的一对大括号去掉呢,呵呵                   return new Fk("fk") {                   };           }            public static void main(String[] args) {                   Test4 t = new Test4();                   Fk f = t.hehe();                   System.out.println(f);           }   }

运行结果:

Fk{x='fk'}

Process finished with exit code 0

还有一个不得不提的经典实例,来自thining in java,有改动:

interface Service {       void method1();       void method2();   }    interface ServiceFactory {       Service getService();   }    class Implementation1 implements Service {       private Implementation1() {}       public void method1() {System.out.println("Implementation1 method1");}       public void method2() {System.out.println("Implementation1 method2");}       public static ServiceFactory factory = new ServiceFactory() {               public Service getService() {                   return new Implementation1();               }           };   }    class Implementation2 implements Service {       private Implementation2() {}       public void method1() {System.out.println("Implementation2 method1");}       public void method2() {System.out.println("Implementation2 method2");}       public static ServiceFactory factory = new ServiceFactory() {               public Service getService() {                   return new Implementation2();               }           };   }    public class Factories {       public static void serviceConsumer(ServiceFactory fact) {           Service s = fact.getService();           s.method1();           s.method2();       }       public static void main(String[] args) {           serviceConsumer(Implementation1.factory);           serviceConsumer(Implementation2.factory);       }   }

这个应用给了我们很多思考,我就不说了,不同人看了会有不同的感受。

内部类的巧妙使用会让你的代码很牛,如果要形容下,那就是:没看懂的时候感觉神出鬼没,看懂后感觉鬼斧神工。不过这些代码多了,别人想看懂都难,想看懂你思路就难上加难了。呵呵!

六、静态内部类

静态内部类是static class型的内部类,这种内部类特点是:它不能访问外部类的非静态成员。要创建静态内部类对象时候,也不需要外部类对象了,直接可以:

new 外部类名.内部类构造方法

来创建,给个例子:

/**   * 静态内部类   *   * @author leizhimin 2009-7-17 16:53:05   */   public class Outer {           public static int i =500;           protected static class Inner {                   int i =100;                   String name;                    Inner(String name) {                           this.name = name;                   }                    void sayHello() {                           System.out.println("Hello " + name);                           Outer.i++;                   }           }            public Inner genInner(String name) {                   return new Inner(name);           }   }    class Test {           public static void main(String[] args) {                   Outer.Inner in1 = new Outer.Inner("1111");                   in1.sayHello();                   System.out.println(Outer.i);                    Outer.Inner in2 = new Outer().genInner("2222");                   in2.sayHello();                   System.out.println(Outer.i);           }   }

运行结果:

Hello 1111

501

Hello 2222

502

Process finished with exit code 0

七、接口内部类

接口内部类自动都是public static的,相当于为接口定义了一种变量类型,这在java的设计中就有使用,比如在HashMap中,就有:

static class Entry implements Map.Entry

下面我给个例子,

/**   * 接口内部类   *   * @author leizhimin 2009-7-17 17:20:28   */   public interface AInterface {           void readme();            class Inner1 implements AInterface {                   public void readme() {                           System.out.println("我是一个接口内部类");                   }           }   }    class Main {           public static void main(String[] args) {                   AInterface.Inner1 in1 = new AInterface.Inner1();                   in1.readme();           }   }

八、内部的类的嵌套

所谓内部类嵌套,就是内部类里面再定义内部类。其实这种用法还真没见过,试试写个简单例子看看吧:

/**   * 嵌套内部类   *   * @author leizhimin 2009-7-17 17:33:48   */   public class Outer {           private void f0() {                   System.out.println("f0");           }            class A {                   private void a() {                           f0();                           System.out.println("a");                   }                    class B {                           protected void b() {                                   a();                                   System.out.println("b");                           }                   }           }   }   class Test{           public static void main(String[] args) {                   Outer o = new Outer();                   Outer.A    a =     o.new A();                   Outer.A.B b = a.new B();                   b.b();           }   }

运行结果:

f0

a

b

Process finished with exit code 0

八、内部类的继承

内部类的继承,可以继承内部类,也可以继承外部类。

/**   * 内部类的继承,可以继承内部类,也可以继承外部类   *   * @author leizhimin 2009-7-22 13:50:01   */   public class Outer {           class Inner {                   void doSomething() {                           System.out.println("Inner doing ...");                   }           }            class Inner2 extends Inner {                   void doSomething() {                           System.out.println("Inner2 doing ...");                   }                    void readme() {                           System.out.println("HeHe!");                   }           }   }    class Test {           public static void main(String[] args) {                   Outer outer = new Outer();                   Outer.Inner in = outer.new Inner();                   Outer.Inner2 in2 = outer.new Inner2();                   in.doSomething();                   in2.doSomething();                   in2.readme();           }   }

运行结果:

Inner doing ...

Inner2 doing ...

HeHe!

Process finished with exit code 0

感谢各位的阅读,以上就是"Java内部类在GUI设计中的作用是什么"的内容了,经过本文的学习后,相信大家对Java内部类在GUI设计中的作用是什么这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!

方法 接口 成员 结果 运行 对象 静态 设计 例子 权限 作用 不同 之间 代码 位置 就是 常见 时候 类名 学习 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网科技有限公司 博彦科技互联网金融 河南云网互联网络科技有限公司 互联网科技公司华为 美国互联网科技巨头监管 小马过河互联网科技 腾讯科技 互联网女皇 亿账通互联网科技 互联网科技小额贷款 互联网科技有限公司 翻译 丰台科技园 互联网公司 博兴的互联网电子科技公司 深圳市优智互联网科技有限公司 米聚互联网科技南京有限公司排面 青海科技产业互联网发展 翼展科技 首家互联网医院 科技互联网行业投资研究 安徽零酒互联网科技有限公司 利用互联网等科技手段 前海云享互联网科技 广州淘业互联网络科技 互联网女皇 腾讯科技 济南华为互联网科技产业总部基地 剑昆互联网络科技有限公司临桂 昭通云南众福互联网科技有限公司 伊宁互联网科技做什么的 广州千川互联网科技有限公司 互联网科技职业技能培训学校 深圳互联网科技园地址 广州全民伙伴互联网科技有限公司
0