一、内部类的访问规则:

1、内部类可以直接访问外部类中的成员,包括私有。格式为外部类名.this

2、外部类要访问内部类,必须建立内部类对象。

代码:

  1. class Outer
  2. {
  3. private int x = 3;
  4.  
  5. class Inner//内部类
  6. {
  7. //int x = 4;
  8. void function()
  9. {
  10. //int x = 6;
  11. System.out.println("innner :"+Outer.this.x);
  12. }
  13. }
  14.  
  15. /**/
  16. void method()
  17. {
  18. Inner in = new Inner();
  19. in.function();
  20. }
  21. }
  22.  
  23. class InnerClassDemo
  24. {
  25. public static void main(String[] args)
  26. {
  27. Outer out = new Outer();
  28. out.method();
  29.  
  30. 直接访问内部类中的成员。
  31. Outer.Inner in = new Outer().new Inner();
  32. in.function();
  33. }
  34. }

  

  

二、内部类访问格式:

1、内部类定义在外部类的成员位置上,而且非私有,就可以在外部其他类中建立内部类对象。

2、格式:外部类名.内部类名 变量名 = 外部类对象.内部类对象;

3、格式:Outer.Inner in = new Outer().new Inner();

4、当内部类在成员位置上,就可以被成员修饰符所修饰。比如,private

5、当内部类被static修饰后,只能直接访问外部类中的static成员。

注意:

1、在外部其他类中,如何直接访问static内部类的非静态成员呢?

new Outer.Inner().function();

2、在外部其他类中,如何直接访问static内部类的静态成员呢?

outer.Inner.function();

3、当外部类中的静态方法访问内部类时,内部类必须是static的。

代码:

  1. class Outer
  2. {
  3. private static int x = 3;
  4.  
  5. static class Inner//静态内部类
  6. {
  7. static void function()
  8. {
  9. System.out.println("innner :"+x);
  10. }
  11. }
  12.  
  13. static class Inner2
  14. {
  15. void show()
  16. {
  17. System.out.println("inner2 show");
  18. }
  19. }
  20.  
  21. public static void method()
  22. {
  23. // Inner.function();
  24. new Inner2().show();
  25. }
  26.  
  27. }
  28.  
  29. class InnerClassDemo2
  30. {
  31. public static void main(String[] args)
  32. {
  33. Outer.method();
  34. Outer.Inner.function();
  35. new Outer.Inner().function();
  36. 直接访问内部类中的成员。
  37. Outer.Inner in = new Outer().new Inner();
  38. in.function();
  39. }
  40. }

  

三、内部类定义在局部:

1、不可以被成员修饰符修饰

2、可以直接访问外部类中的成员,因为还有外部类中的引用。

3、但是不可以访问它所在的局部中的变量。只能访问被final修饰的局部变量。

代码:

  1. class Outer
  2. {
  3. int x = 3;
  4.  
  5. void method(final int a)
  6. {
  7. final int y = 4;
  8. class Inner
  9. {
  10. void function()
  11. {
  12. System.out.println(y);
  13. }
  14. }
  15. new Inner().function();
  16.  
  17. }
  18. }
  19.  
  20. class InnerClassDemo3
  21. {
  22. public static void main(String[] args)
  23. {
  24. Outer out = new Outer();
  25. out.method(7);
  26. out.method(8);
  27. }
  28. }

四、匿名内部类(其实就是内部类的简写格式):

1、内部类必须是继承一个类或者实现接口。

2、匿名内部类的格式: new 父类或者接口(){定义子类的内容}

3、其实匿名内部类就是一个匿名子类对象。可以理解为带内容的对象。

4、匿名内部类中定义的方法最好不要超过3个。

代码:

  1. abstract class AbsDemo
  2. {
  3. abstract void show();
  4.  
  5. }
  6.  
  7. class Outer
  8. {
  9. int x = 3;
  10.  
  11. class Inner extends AbsDemo
  12. {
  13. int num = 90;
  14. void show()
  15. {
  16. System.out.println("show :"+num);
  17. }
  18. void abc()
  19. {
  20. System.out.println("hehe");
  21. }
  22. }
  23.  
  24. public void function()
  25. {
  26. AbsDemo a = new Inner();
  27. Inner in = new Inner();
  28. in.show();
  29. in.abc();
  30.  
  31. AbsDemo d = new AbsDemo()
  32. {
  33. int num = 9;
  34. void show()
  35. {
  36. System.out.println("num"+num);
  37. }
  38. void abc()
  39. {
  40. System.out.println("haha");
  41. }
  42. };
  43.  
  44. d.show();
  45. }
  46. }
  47.  
  48. class InnerClassDemo4
  49. {
  50. public static void main(String[] args)
  51. {
  52. new Outer().function();
  53. }
  54. }

  

JAVA学习:内部类的更多相关文章

  1. Java学习--内部类(一)

    Java学习--内部类(一) 一. 内部类的定义和特点 class Outer{ privite int num = 5; class Inner{ public void Display(){ Sy ...

  2. java学习——内部类(一)

    内部类 把一个类放在另一个类中定义,这个定义在其他内部的类被称为内部类,包含内部类 的类被成为外部类,Java从JDK1.1开始引入了内部类的定义. 内部类的作用: 内部类提供了更好的封装,可以把内部 ...

  3. Java学习——内部类

    内部类的访问规则:1,内部类可以直接访问外部类中的成员,包括私有. 之所以可以直接访问外部类中的成员,是因为内部类中持有了 一个外部类的引用,格式 外部类名.this2,外部类要访问内部类,必须建立内 ...

  4. java学习——内部类(二)

    使用内部类 内部类一共有三种使用方法: 1.在外部类中使用内部类 在外部类中使用内部类,与平常使用内部类没有区别,可以直接通过内部类的类名来定义变量,通过new调用内部类的构造方法来创建实例. 唯一的 ...

  5. Java学习笔记之---内部类

    Java学习笔记之---内部类 (一)成员内部类 内部类在外部使用时,无法直接实例化,需要借助外部类信息才能实例化 内部类的访问修饰符可以任意,但是访问范围会受到影响 内部类可以直接访问外部类的成员, ...

  6. 【Java学习笔记之二十五】初步认知Java内部类

    可以将一个类的定义放在另一个类的定义内部,这就是内部类. 内部类是一个非常有用的特性但又比较难理解使用的特性(鄙人到现在都没有怎么使用过内部类,对内部类也只是略知一二). 第一次见面 内部类我们从外面 ...

  7. 0035 Java学习笔记-注解

    什么是注解 注解可以看作类的第6大要素(成员变量.构造器.方法.代码块.内部类) 注解有点像修饰符,可以修饰一些程序要素:类.接口.变量.方法.局部变量等等 注解要和对应的配套工具(APT:Annot ...

  8. 0028 Java学习笔记-面向对象-Lambda表达式

    匿名内部类与Lambda表达式示例 下面代码来源于:0027 Java学习笔记-面向对象-(非静态.静态.局部.匿名)内部类 package testpack; public class Test1{ ...

  9. 深入理解Java:内部类

    什么是内部类? 内部类是指在一个外部类的内部再定义一个类.内部类作为外部类的一个成员,并且依附于外部类而存在的.内部类可为静态,可用protected和private修饰(而外部类只能使用public ...

  10. 《Java学习笔记(第8版)》学习指导

    <Java学习笔记(第8版)>学习指导 目录 图书简况 学习指导 第一章 Java平台概论 第二章 从JDK到IDE 第三章 基础语法 第四章 认识对象 第五章 对象封装 第六章 继承与多 ...

随机推荐

  1. ASP.Net MVC 数据处理

    ASP.Net MVC 数据处理   第三天我们将学习Asp.Net中数据处理功能,了解数据访问层,EF,以及EF中常用的代码实现方式,创建数据访问层和数据入口,处理Post数据,以及数据验证等功能. ...

  2. Win8.1 Update如何禁用OneDrive同步服务

    原文 Win8.1 Update如何禁用OneDrive同步服务 上周,IT之家为爱好者分享Win8.1 Update如何提高OneDrive上传速度教程.但是,由于国内特殊网络环境,导致微软OneD ...

  3. 《剑指offer》 相应 在线测试地址

    <剑指Offer>面试题集收录汇总 面试题1 赋值运算符函数 不适合在线模式 面试题2 实现Singleton模式 不适合在线模式 面试题3 二维数组中的查找 已收录 面试题4 替换空格 ...

  4. Java8的日期和时间的库20经常使用的演示样本

    除了lambda表达,stream以及从一些小的改进,Java 8还推出了新的日期和时间API,在本教程中,我们将展示通过几个简单的任务来学习如何使用示例Java 8这组API.Java至今.日历和时 ...

  5. [Attila GPU] ATTILA GPU Streamer Unit (D3D Input Assambler) 结构分析

    http://www.opengpu.org/forum.php?mod=viewthread&tid=40&highlight=Attila 查看: 7488|回复: 26    [ ...

  6. java设计模式之二抽象工厂模式(Abstract Factory)

    工厂方法模式有一个问题就是,类的创建依赖工厂类,也就是说,如果想要拓展程序,必须对工厂类进行修改,这违背了闭包原则,所以,从设计角度考虑,有一定的问题,如何解决?就用到抽象工厂模式,创建多个工厂类,这 ...

  7. 【phpMyAdmin】更改配置文件连接到其他server

    默认phpMyAdmin安装完毕后对机器的访问mysql,但有时我们需要访问其它server的mysql数据库,所以我们需要配置. 真,phpMyAdmin已经为我们做了配置的选项.可是须要我们进行一 ...

  8. javascript7

    语句:条件,循环,跳转, 表达式语句,复合语句和空语句,声明语句,var,function,条件语句,switch,循环,标签语句,break语句,continue语句,return语句,throw语 ...

  9. 间支付系统,DataGridView

    我们通常看到很多的学习使用控制数据库和接口连接--DataGridView,在我们的房间,当我们敲开使用第一遍阶段似该控件--MSHFlexGrid,随着学习的深入,发现我们用到的平台越来越人性化了, ...

  10. 纯Lambda实现斐波那契数列

    还需要考虑溢出等问题,主要无事写着玩 Func<float, float, float> a = (arg1, arg2) => 0f;//init ; a = (lastNumbe ...