JAVA学习:内部类
一、内部类的访问规则:
1、内部类可以直接访问外部类中的成员,包括私有。格式为外部类名.this
2、外部类要访问内部类,必须建立内部类对象。
代码:
- class Outer
- {
- private int x = 3;
- class Inner//内部类
- {
- //int x = 4;
- void function()
- {
- //int x = 6;
- System.out.println("innner :"+Outer.this.x);
- }
- }
- /**/
- void method()
- {
- Inner in = new Inner();
- in.function();
- }
- }
- class InnerClassDemo
- {
- public static void main(String[] args)
- {
- Outer out = new Outer();
- out.method();
- 直接访问内部类中的成员。
- Outer.Inner in = new Outer().new Inner();
- in.function();
- }
- }
二、内部类访问格式:
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的。
代码:
- class Outer
- {
- private static int x = 3;
- static class Inner//静态内部类
- {
- static void function()
- {
- System.out.println("innner :"+x);
- }
- }
- static class Inner2
- {
- void show()
- {
- System.out.println("inner2 show");
- }
- }
- public static void method()
- {
- // Inner.function();
- new Inner2().show();
- }
- }
- class InnerClassDemo2
- {
- public static void main(String[] args)
- {
- Outer.method();
- Outer.Inner.function();
- new Outer.Inner().function();
- 直接访问内部类中的成员。
- Outer.Inner in = new Outer().new Inner();
- in.function();
- }
- }
三、内部类定义在局部:
1、不可以被成员修饰符修饰
2、可以直接访问外部类中的成员,因为还有外部类中的引用。
3、但是不可以访问它所在的局部中的变量。只能访问被final修饰的局部变量。
代码:
- class Outer
- {
- int x = 3;
- void method(final int a)
- {
- final int y = 4;
- class Inner
- {
- void function()
- {
- System.out.println(y);
- }
- }
- new Inner().function();
- }
- }
- class InnerClassDemo3
- {
- public static void main(String[] args)
- {
- Outer out = new Outer();
- out.method(7);
- out.method(8);
- }
- }
四、匿名内部类(其实就是内部类的简写格式):
1、内部类必须是继承一个类或者实现接口。
2、匿名内部类的格式: new 父类或者接口(){定义子类的内容}
3、其实匿名内部类就是一个匿名子类对象。可以理解为带内容的对象。
4、匿名内部类中定义的方法最好不要超过3个。
代码:
- abstract class AbsDemo
- {
- abstract void show();
- }
- class Outer
- {
- int x = 3;
- class Inner extends AbsDemo
- {
- int num = 90;
- void show()
- {
- System.out.println("show :"+num);
- }
- void abc()
- {
- System.out.println("hehe");
- }
- }
- public void function()
- {
- AbsDemo a = new Inner();
- Inner in = new Inner();
- in.show();
- in.abc();
- AbsDemo d = new AbsDemo()
- {
- int num = 9;
- void show()
- {
- System.out.println("num"+num);
- }
- void abc()
- {
- System.out.println("haha");
- }
- };
- d.show();
- }
- }
- class InnerClassDemo4
- {
- public static void main(String[] args)
- {
- new Outer().function();
- }
- }
JAVA学习:内部类的更多相关文章
- Java学习--内部类(一)
Java学习--内部类(一) 一. 内部类的定义和特点 class Outer{ privite int num = 5; class Inner{ public void Display(){ Sy ...
- java学习——内部类(一)
内部类 把一个类放在另一个类中定义,这个定义在其他内部的类被称为内部类,包含内部类 的类被成为外部类,Java从JDK1.1开始引入了内部类的定义. 内部类的作用: 内部类提供了更好的封装,可以把内部 ...
- Java学习——内部类
内部类的访问规则:1,内部类可以直接访问外部类中的成员,包括私有. 之所以可以直接访问外部类中的成员,是因为内部类中持有了 一个外部类的引用,格式 外部类名.this2,外部类要访问内部类,必须建立内 ...
- java学习——内部类(二)
使用内部类 内部类一共有三种使用方法: 1.在外部类中使用内部类 在外部类中使用内部类,与平常使用内部类没有区别,可以直接通过内部类的类名来定义变量,通过new调用内部类的构造方法来创建实例. 唯一的 ...
- Java学习笔记之---内部类
Java学习笔记之---内部类 (一)成员内部类 内部类在外部使用时,无法直接实例化,需要借助外部类信息才能实例化 内部类的访问修饰符可以任意,但是访问范围会受到影响 内部类可以直接访问外部类的成员, ...
- 【Java学习笔记之二十五】初步认知Java内部类
可以将一个类的定义放在另一个类的定义内部,这就是内部类. 内部类是一个非常有用的特性但又比较难理解使用的特性(鄙人到现在都没有怎么使用过内部类,对内部类也只是略知一二). 第一次见面 内部类我们从外面 ...
- 0035 Java学习笔记-注解
什么是注解 注解可以看作类的第6大要素(成员变量.构造器.方法.代码块.内部类) 注解有点像修饰符,可以修饰一些程序要素:类.接口.变量.方法.局部变量等等 注解要和对应的配套工具(APT:Annot ...
- 0028 Java学习笔记-面向对象-Lambda表达式
匿名内部类与Lambda表达式示例 下面代码来源于:0027 Java学习笔记-面向对象-(非静态.静态.局部.匿名)内部类 package testpack; public class Test1{ ...
- 深入理解Java:内部类
什么是内部类? 内部类是指在一个外部类的内部再定义一个类.内部类作为外部类的一个成员,并且依附于外部类而存在的.内部类可为静态,可用protected和private修饰(而外部类只能使用public ...
- 《Java学习笔记(第8版)》学习指导
<Java学习笔记(第8版)>学习指导 目录 图书简况 学习指导 第一章 Java平台概论 第二章 从JDK到IDE 第三章 基础语法 第四章 认识对象 第五章 对象封装 第六章 继承与多 ...
随机推荐
- ASP.Net MVC 数据处理
ASP.Net MVC 数据处理 第三天我们将学习Asp.Net中数据处理功能,了解数据访问层,EF,以及EF中常用的代码实现方式,创建数据访问层和数据入口,处理Post数据,以及数据验证等功能. ...
- Win8.1 Update如何禁用OneDrive同步服务
原文 Win8.1 Update如何禁用OneDrive同步服务 上周,IT之家为爱好者分享Win8.1 Update如何提高OneDrive上传速度教程.但是,由于国内特殊网络环境,导致微软OneD ...
- 《剑指offer》 相应 在线测试地址
<剑指Offer>面试题集收录汇总 面试题1 赋值运算符函数 不适合在线模式 面试题2 实现Singleton模式 不适合在线模式 面试题3 二维数组中的查找 已收录 面试题4 替换空格 ...
- Java8的日期和时间的库20经常使用的演示样本
除了lambda表达,stream以及从一些小的改进,Java 8还推出了新的日期和时间API,在本教程中,我们将展示通过几个简单的任务来学习如何使用示例Java 8这组API.Java至今.日历和时 ...
- [Attila GPU] ATTILA GPU Streamer Unit (D3D Input Assambler) 结构分析
http://www.opengpu.org/forum.php?mod=viewthread&tid=40&highlight=Attila 查看: 7488|回复: 26 [ ...
- java设计模式之二抽象工厂模式(Abstract Factory)
工厂方法模式有一个问题就是,类的创建依赖工厂类,也就是说,如果想要拓展程序,必须对工厂类进行修改,这违背了闭包原则,所以,从设计角度考虑,有一定的问题,如何解决?就用到抽象工厂模式,创建多个工厂类,这 ...
- 【phpMyAdmin】更改配置文件连接到其他server
默认phpMyAdmin安装完毕后对机器的访问mysql,但有时我们需要访问其它server的mysql数据库,所以我们需要配置. 真,phpMyAdmin已经为我们做了配置的选项.可是须要我们进行一 ...
- javascript7
语句:条件,循环,跳转, 表达式语句,复合语句和空语句,声明语句,var,function,条件语句,switch,循环,标签语句,break语句,continue语句,return语句,throw语 ...
- 间支付系统,DataGridView
我们通常看到很多的学习使用控制数据库和接口连接--DataGridView,在我们的房间,当我们敲开使用第一遍阶段似该控件--MSHFlexGrid,随着学习的深入,发现我们用到的平台越来越人性化了, ...
- 纯Lambda实现斐波那契数列
还需要考虑溢出等问题,主要无事写着玩 Func<float, float, float> a = (arg1, arg2) => 0f;//init ; a = (lastNumbe ...