静态内部类:类中静态类

成员内部类:类中非静态类

局部内部类:类中方法中有名字的类

匿名内部类:类中方法中无名的类

引言:在Java中通常情况下,一个类中会有属性和方法,但还可以包含内部类,内部类可以在类中还可以在方法中。

  1.  在类中的内部类:

    1)  静态内部类:在类中的静态类,静态内部类中的方法只能访问外部类中的静态成员变量,非静态变量不能访问,

      创建静态内部类的对象可以通过“外部类.内部类名()”完成。

    参见:com.oop.ch14.StaticInnerTest

  1. package com.oop.ch14;
  2.  
  3. /**
  4. * 练习”静态内部类“的创建和使用
  5. *
  6. */
  7. public class StaticInnerTest {
  8. public static void main(String[] args) {
  9. //创建静态内部类的对象来调用其中的方法
  10. StaticInner.Inner inner = new StaticInner.Inner();
  11. inner.view();
  12. }
  13. }
  14.  
  15. /**
  16. * 外部类:其中包含了内部类(静态内部类)
  17. *
  18. */
  19. class StaticInner{
  20. static String name = "张三";
  21. Integer age = 20;
  22.  
  23. /**
  24. * 定义一个内部类:其中有一个方法,方法中会访问外部类的属性
  25. */
  26. static class Inner{
  27. public void view() {
  28. //在静态内部类中只能访问外部类中静态的成员变量name;非静态的age无法访问。
  29. //System.out.println("age:" + age);
  30. System.out.println("name:" + name);
  31. }
  32. }
  33. }

    2)  成员内部类:在类中的非静态类,成员内部类中的方法能访问外部类中的静态成员变量和非静态变量,

      创建成员内部类的对象可以通过先创建外部类的对象,再通过“外部类的对象.new 成员内部类名()”完成。

    参见:com.oop.ch14.MemberInnerTest

  1. package com.oop.ch14;
  2.  
  3. /**
  4. * 练习”成员内部类“的创建和使用
  5. * 成员内部类中的方法能访问外部类中的静态成员变量和非静态变量,
  6. * 创建成员内部类的对象可以通过:
  7. * 先创建外部类的对象,
  8. * 再通过“外部类的对象.new 成员内部类名()”完成。
  9. *
  10. */
  11. public class MemberInnerTest {
  12. public static void main(String[] args) {
  13. //创建外部类的对象
  14. MemberInner memberInner = new MemberInner();
  15. //创建成员内部类的对象来调用其中的方法
  16. MemberInner.Inner inner = memberInner.new Inner();
  17. inner.view();
  18. }
  19. }
  20.  
  21. /**
  22. * 外部类:其中包含了内部类(成员内部类)
  23. *
  24. */
  25. class MemberInner{
  26. static String name = "张三";
  27. Integer age = 20;
  28.  
  29. /**
  30. * 定义一个内部类:其中有一个方法,方法中会访问外部类的属性
  31. */
  32. public class Inner{
  33. public void view() {
  34. /**
  35. * 成员内部类中的方法能访问外部类中的静态成员变量和非静态变量
  36. */
  37. System.out.println("age:" + age);
  38. System.out.println("name:" + name);
  39. }
  40. }
  41. }

  2.  在方法中的内部类:

    1)  局部内部类:在方法中,该类有名称,在局部内部类中,可以定义方法,可以访问外部类的成员变量,

      在外部类的方法中可以直接创建内部类的对象并调用内部类的方法。

      在测试类中只需要创建外部类的对象就可以调用外部类的方法,同时也就调用了内部类的方法。

    参见:com.oop.ch14.PartInnerTest

  1. package com.oop.ch14;
  2.  
  3. import com.oop.ch14.StaticInner.Inner;
  4.  
  5. /**
  6. * 练习使用”局部内部类“
  7. *
  8. */
  9. public class PartInnerTest {
  10. public static void main(String[] args) {
  11. //创建外部类的对象,调用外部类的方法,会自动调用内部类的方法
  12. PartInner partInner = new PartInner();
  13. partInner.view();
  14. }
  15. }
  16.  
  17. class PartInner{
  18. //外部类的成员变量
  19. String name = "外部类的成员变量";
  20. Integer age = 18 ;
  21. /**
  22. * 外部类的方法
  23. */
  24. public void view() {
  25. //声明为final,放置多次调用后被修改
  26. final String name = "内部类的成员变量";
  27. System.out.println("外部类的view()的局部变量name的值:" + name);
  28. /**
  29. * 局部内部类
  30. *局部内部类:在方法中,该类有名称,在局部内部类中,可以定义方法,可以访问外部类的成员变量,
  31. *在外部类的方法中可以直接创建内部类的对象并调用内部类的方法。
  32. *在测试类中只需要创建外部类的对象就可以调用外部类的方法,同时也就调用了内部类的方法。
  33. */
  34. class Inner{
  35. public void innerView() {
  36. System.out.println("外部类方法中Inner内部类的方法innerView()输出的name:" + name);
  37. }
  38. }
  39.  
  40. Inner inner = new Inner();
  41. inner.innerView();
  42. }
  43.  
  44. }

    2)  匿名内部类:在方法中,该类没有名称,但是它可以继承某个父类或实现某些接口,

      同时也可以实现父类或接口中的方法,从而达到想实现的任务。

    参见:com.oop.ch14.CardLayoutTest.main(String[])

      javax.swing.AbstractButton.addActionListener(ActionListener)

  1. package com.oop.ch14;
  2.  
  3. import java.awt.BorderLayout;
  4. import java.awt.CardLayout;
  5. import java.awt.Color;
  6. import java.awt.event.ActionEvent;
  7. import java.awt.event.ActionListener;
  8.  
  9. import javax.swing.JButton;
  10. import javax.swing.JFrame;
  11. import javax.swing.JPanel;
  12.  
  13. /**
  14. *练习使用卡片布局管理器
  15. *
  16. *将组件元素放置在同一个位置,通过“事件”触发切换。
  17. */
  18. public class CardLayoutTest {
  19. static CardLayout cardLayout = new CardLayout();
  20. static JPanel jp_images = new JPanel(cardLayout);
  21.  
  22. public static void main(String[] args) {
  23. JFrame jFrame = new JFrame("卡片布局管理器");
  24. //1、定义需要的组件元素:面板、按钮
  25. JPanel jp_image1,jp_image2,jp_image3;
  26. jp_image1 = new JPanel();
  27. jp_image2 = new JPanel();
  28. jp_image3 = new JPanel();
  29. //设置图片面板的背景,模拟在卡片上放置一张图片
  30. jp_image1.setBackground(Color.RED);
  31. jp_image2.setBackground(Color.GREEN);
  32. jp_image3.setBackground(Color.BLUE);
  33. //创建放置卡片的面板,同时将卡片布局管理器传入其中
  34. //jp_images = new JPanel(cardLayout);
  35. //将放置了图片的子面板放置到jp_iamges中
  36. jp_images.add(jp_image1);
  37. jp_images.add(jp_image2);
  38. jp_images.add(jp_image3);
  39. //定义jp_button面板放置按钮
  40. JPanel jp_button;
  41. jp_button = new JPanel();
  42. //准备两个按钮
  43. JButton jb_pre,jb_next;
  44. jb_pre = new JButton("上一张");
  45. jb_next = new JButton("下一张");
  46. //将按钮放置到面板中
  47. jp_button.add(jb_pre,BorderLayout.WEST);
  48. jp_button.add(jb_next,BorderLayout.EAST);
  49.  
  50. //2、将已经包含了组件元素的两个面板放置到窗体中
  51. jFrame.add(jp_images);
  52. jFrame.add(jp_button, BorderLayout.SOUTH);
  53.  
  54. //3、设置JFrame窗体的一些参数
  55. //设置在关闭窗体时默认要执行的操作,通常时退出程序本身
  56. jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  57. //设置窗体起始位置、宽高
  58. jFrame.setBounds(200, 150, 400, 300);
  59. //设置窗体可见性
  60. jFrame.setVisible(true);
  61.  
  62. /**
  63. * 4、给上一张、下一张两个按钮添加点击事件
  64. * 具体实施时需要通过”匿名内部类“来完成
  65. * “匿名内部类”是一个方法中的一个类
  66. * 但它没有名字,他要实现ActionListener接口,并实现其中的监听方法
  67. */
  68. jb_pre.addActionListener(new ActionListener() {
  69. @Override
  70. public void actionPerformed(ActionEvent e) {
  71. cardLayout.previous(jp_images);
  72. }
  73.  
  74. });
  75.  
  76. jb_next.addActionListener(new ActionListener() {
  77. @Override
  78. public void actionPerformed(ActionEvent e) {
  79. cardLayout.next(jp_images);
  80. }
  81.  
  82. });
  83.  
  84. }
  85.  
  86. /*
  87. //如果实现ActionListener接口可以用实现方法的方式做
  88. @Override
  89. public void actionPerformed(ActionEvent e) {
  90.  
  91. }*/
  92. }

Java 四种内部类的更多相关文章

  1. java四种内部类详解

    一般来说,有4中内部类:常规内部类.静态内部类.局部内部类.匿名内部类. 一.常规内部类:常规内部类没有用static修饰且定义在在外部类类体中.   1.常规内部类中的方法可以直接使用外部类的实例变 ...

  2. Java基础(54):java四种内部类详解(转)

    一般来说,有4中内部类:常规内部类.静态内部类.局部内部类.匿名内部类.  一.常规内部类:常规内部类没有用static修饰且定义在在外部类类体中. 1.常规内部类中的方法可以直接使用外部类的实例变量 ...

  3. java 四种内部类和内部接口

    /** * 常规内部类:常规内部类没有用static修饰且定义在在外部类类体中. * 1.常规内部类中的方法可以直接使用外部类的实例变量和实例方法. * 2.在常规内部类中可以直接用内部类创建对象 * ...

  4. java四种内部类

    内部类有成员内部类,局部内部类,匿名内部类,静态内部类. 1,成员内部类package innerClass; public class InnerClassTest { String s1=&quo ...

  5. Java的四种内部类

    Java的四种内部类包括如下: 成员内部类 静态内部类 局部内部类 匿名内部类 成员内部类: 定义在另一个类(外部类)的内部,而且与成员方法和属性平级叫成员内部类,......相当于外部类的非静态方法 ...

  6. java内部类及四种内部类的实现方式

     java内部类及四种内部类的实现方式 一.内部类定义:内部类分为: 成员内部类.静态嵌套类.方法内部类.匿名内部类. 二.为何要内部类?a.内部类提供了某种进入外围类的窗户.b.也是最吸引人的原因, ...

  7. Java的四种内部类(含代码实例)

    写在前面:本博客为本人原创,严禁任何形式的转载!本博客只允许放在博客园(.cnblogs.com),如果您在其他网站看到这篇博文,请通过下面这个唯一的合法链接转到原文! 本博客全网唯一合法URL:ht ...

  8. Java中的四种内部类

    Java中有四种内部类: 成员内部类:定义在另一个类(外部类)的内部,而且与成员属性和方法平级,故称成员内部类.类比于外部类的非静态方法,如果用static修饰就变成了静态内部类 静态内部类:使用st ...

  9. Java 四种线程池newCachedThreadPool,newFixedThreadPool,newScheduledThreadPool,newSingleThreadExecutor

    介绍new Thread的弊端及Java四种线程池的使用,对Android同样适用.本文是基础篇,后面会分享下线程池一些高级功能. 1.new Thread的弊端执行一个异步任务你还只是如下new T ...

随机推荐

  1. Java中的集合和线程安全

    通过Java指南我们知道Java集合框架(Collection Framework)如何为并发服务,我们应该如何在单线程和多线程中使用集合(Collection). 话题有点高端,我们不是很好理解.所 ...

  2. psql 命令

    (1)使用命令行连接数据库 psql -U postgres -h localhost -p 5433 (2)列出所有的数据库 \l -- 查看所有数据库 (3)进入某个数据库 \c name -- ...

  3. Cobalt Strike特征修改

    一.Teamserver模块端口信息 vim teamserver修改Cobalt Strike默认服务端50500端口为其他任意端口 二.SSL默认证书信息 Cobalt Strike默认SSL证书 ...

  4. 总结下awk基本用法

    命令格式: awk '{commands} [{other commands}]' awk 'condition{commands} [{other commands}]' 如:awk '$4==&q ...

  5. Linux 任务管理器(二)

    特殊文件与进程 fuser命令 [root@localhost home]# fuser -muv . 用户 进程号 权限 命令 /home: root kernel mount (root)/hom ...

  6. Codeforces 747F Igor and Interesting Numbers DP 组合数

    题意:给你一个数n和t,问字母出现次数不超过t,第n小的16进制数是多少. 思路:容易联想到数位DP, 然而并不是...我们需要知道有多少位,在知道有多少位之后,用试填法找出答案.我们设dp[i][j ...

  7. Windows——关于Word2016/2019提示需要修复问题处理

    一.问题描述 打开Word提示 很抱歉此功能看似已中断,并需要修复.请使用Windows控制面板中的“程序和功能”选项修复Microsoft Office. 二.解决方法 运行 regedit 进入注 ...

  8. table响应式设计

    table不可用flex布局和td宽度的自适应. table外层加div.mml-table设置overflow-x:auto可以添加横向滚动条.

  9. Magento多语言注意事项

    Magento一般使用CSV文件方式翻译国际化词条 一般用法是代码中: <?php echo Mage::helper("module_name")->__('Item ...

  10. Fatal error: Call to a member function on a non-object 的2种解决办法

    这两天被一个莫名其妙的错误:Fatal error: Call to a member function on a non-object in d://www/htdocs/inc.php 77  搞 ...