当前位置: 首页 > news >正文

Java 第十一章 GUI编程(3)

目录

内部类

内部类定义

内部类的特点

匿名内部类

格式:

内部类的意义

实例


内部类


   ● 把类定义在另一个类的内部,该类就被称为内部类。

   ● 如果在类 Outer 的内部再定义一个类 Inner,此时类 Inner 就称为内部类 (或称为嵌套类),而类 Outer 则称为外部类(或称为宿主类)。


内部类定义

内部类——就是位于外部类成员位置的类

特点:可以使用外部类中所有的成员变量和成员方法(包括private的)

class Outer {
      private int age = 20;
      class Inner {
                   public void show() {
                      System.out.println(age);
              }
       }
 }

内部类的特点

  • 内部类仍然是一个独立的类,在编译之后内部类会被编译成独立 的.class文件,但是前面冠以外部类的类名和$符号。
  •  内部类不能用普通的方式访问。内部类是外部类的一个成员,因此内部 类可以自由地访问外部类的成员变量,无论是否为 private 的。

匿名内部类

   匿名内部类是一种特殊的局部内部类,它是通过匿名类实现接口。

格式:

new 接口名称/抽象类名称() {

重写抽象方法;

}

注:在实际开发中,我们常常遇到这样的情况:一个接口/抽象类的方法的某个实现方 式在程序中只会执行一次,但为了使用它,我们需要创建它的实现类。此时可以 使用匿名内部类的方式,可以无需创建新的类,减少代码冗余。

public interface IA {

abstract void fun1();

}

new IA() {

@Override public void fun1() {

System.out.println("匿名类实现fun1");

  }

};

内部类的意义

1.封装性

   将只有在某个类中使用的功能定义在内部中,并可以使用不同访问权限修饰控制

2.实现多继承 java是不支持多继承的,多继承有一个致命性的缺陷, 容易出现钻石继承结构,例如图。

public class Father{
    public string powerul="市长";
}
publie class Mother{
    public string wealthy=" 百万";
}
public class son {
class xtends Father extends Father{
}
c1ass xtends Mother extends Mother{
}
publie void sayHello(}{
    String father new xtends rather().powerul;
    String mother = new xtends Mother().wealthv;
    System.out.println("my father is:" + father + "my mother has:" + mother);
  }
}

实例(设置内部线程类)

 //为我们发送按钮注册事件监听
        button1.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                //获取输入的聊天内容
                String s = textField1.getText();
                if (s.length()==0) {
                    JOptionPane.showMessageDialog(null, "聊天内容不能为空!");
                    return;
                }
                //发送聊天内容
                try { //拼接聊天内容 把账户,发送时间,聊天内容
                    s= account+"  "+dataUntil.strdom(new Date())+"\n"+s+"\n";
                       dataOutputStream.writeUTF(s);
                       textField1.setText("");
                } catch (IOException ex) {
                    JOptionPane.showMessageDialog(null, "发送失败" );
                }
            }
        });
        //来到聊天窗口后,就会随时有别的客户端发送消息,在聊天窗口中,循环监听来自服务器发送的消息
        new ReceiveThread().start();//启动监听线程
    }
   //创建接收服务器发送的消息的线程
   private class ReceiveThread extends Thread {
        boolean mark = true;
        @Override
        public void run() {
            while (mark){//如果接收到消息就会传入消息框中
                try {
                    String s = dataInputStream.readUTF();
                    textArea1.append(s);
                } catch (IOException e) {
                    mark = false;
                }


            }
        }
    }

 

 

相关文章:

  • golang接口用法-代码案例
  • 基于SpringBoot的在线学习平台
  • C++的构造函数和析构函数
  • electron-builder创建桌面应用
  • Visual Studio2022 中的隐形用法
  • 使用命令行工具控制wireshark对抓包文件进行针对性处理的总结
  • 代码随想录第55期训练营第八天|LeetCode344.反转字符串、541.反转字符串II、卡码网:54.替换数字
  • 嵌入式硬件工程师从小白到入门-原理图(三)
  • lecode2680. 最大或值-medium
  • <el-autocompoete>下拉列表,点击选择之后的操作事件
  • 【人工智能】LM Studio 的 GPU 加速:释放大模型推理潜能的极致优化
  • 源码分析之Leaflet中dom模块DomEvent.DoubleTap的实现原理
  • STM32标准库之I2C示例代码
  • mac系统conda的python环境下安装uWSGI报缺少libpython3.9.a问题解决方法
  • Linux:gsd-account进程异常内存泄漏排查
  • 一个免费 好用的pdf在线处理工具
  • Jmeter旧版本如何下载
  • 接口自动化测试框架详解
  • 永磁同步电机模型第三篇之两相电机坐标变换
  • SolidWorks使用显卡教程
  • 奥迪车加油时频繁“跳枪”维修两年未解决,4S店拒退换:可延长质保
  • 牛市早报|中方调整对美加征关税措施,五部门约谈外卖平台企业
  • 俄副外长:俄美两国将举行双边谈判
  • 体验中国传统文化、采购非遗文创,波兰游客走进上海市群艺馆
  • 伤员回归新援融入,海港逆转海牛重回争冠集团
  • 临港新片区:发布再保险、国际航运、生物医药3个领域数据出境操作指引