- 浏览: 173111 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (104)
- JavaScript备忘 (11)
- Java编程 (23)
- struts框架 (3)
- hibernate框架 (0)
- ibatis框架 (2)
- C++编程 (2)
- 数据库 (8)
- 操作系统 (2)
- Extjs (0)
- 基于web的工作流引擎设计 (0)
- 开发异常备忘 (5)
- 项目管理工具 (6)
- Spring框架 (3)
- HTML (1)
- 项目架构 (1)
- 备忘 (20)
- 设计模式 (9)
- Disruptor (0)
- CQRS (0)
- DDD (0)
- Axon (0)
- JavaScript (1)
- 微信 (0)
- 新浪微博 (1)
- 软件备份 (2)
- AngularJS (1)
- 安全性 (1)
- Linux (2)
- 工具 (4)
- OSGI (1)
- idea (2)
- Docker (1)
- 测试相关 (0)
- WebService (1)
- 数据安全 (0)
- 移动开发 (0)
- springboot (1)
最新评论
-
larryscale:
zz_wangyuhoho 写道你这个工程跑不起来呀我测试过的 ...
Springmvc3+Spring3+MyBatis3 -
zz_wangyuhoho:
你这个工程跑不起来呀
Springmvc3+Spring3+MyBatis3 -
aeolusj:
var myAlert=alert;改为var myAlert ...
js 拦截alert对话框 -
skcks:
建行内部开发平台也是做了一个类似的封装用于ajax远程调用服务 ...
通用Ajax设计 -
qiuyu1990:
这个应该是 DWR的原理吧
通用Ajax设计
内部类 (inner class)
定义:在一个类中定义另外一个类,这个类就叫做内部类。
优点:内部类可以让我们将逻辑上相关的一组类组织起来,并由外部类来控制内部类的可见性。
当我们建立一个内部类时,其对象 就拥有了与外部类对象 之间的一种关系,这是通过一个特殊的this reference形成的,使得内部类对象可以随意的访问外部类中所有的成员。
为什么要使用内部类?
1). 在内部类中,可以随意的访问外部类的成员,这可以让我们更好地组织管理我们的代码,增强代码的可读性。
2).内部类可以用于创建适配器类,适配器类是用于实现接口的类。使用内部类来实现接口,可以更好地定位与接口关联的方法在代码中的位置。
3).将内部类设置为私有的,可以隐藏实现的细节。
4).一个方法要继承另一个类且要实现一个接口,并且父类和接口中有一个相同签名的方法,此时,可以用内部类来解决这种问题
通过以下代码演示,可清楚地了解到如何进行内部类和外部类之间进行访问。
1. 在同一类中,从外部类中调用内部类的属性和方法
Outer.java
public class Outer {//外部类 private int member=123; //外部类成员 private void outerMethod(){//外部类方法 System.out.println("outer_Method:"+member); } private class Inner {//内部类 private int member = 789;//内部类成员 private void innerMethod(){//内部类方法 System.out.println("inner_Method:"+member); } } public void print (){ Inner inner = new Inner(); System.out.println("inner_Member:"+inner.member); inner.innerMethod(); } }
Test.java
public class Test {//测试类 public static void main(String[] args) { Outer outer = new Outer(); outer.print(); } }
结果:
inner_Member:789
inner_Method:789
2. 在同一类中,从内部类中调用外部类的属性和方法
Outer.java
package main.java.sameclass2; public class Outer {//外部类 private int member=123; //外部类成员 private void outerMethod(){//外部类方法 System.out.println("outer_Method:"+member); } private class Inner {//内部类 private int member = 789;//内部类成员 private void innerMethod(){//内部类方法 System.out.println("inner_Method:"+member); } private void accessOuter(){//内部类访问外部类 System.out.println("outer_Member:"+Outer.this.member); Outer.this.outerMethod(); } } public void print (){ Inner inner = new Inner(); inner.accessOuter(); } }
Test.java
package main.java.sameclass2; public class Test {//测试类 public static void main(String[] args) { Outer outer = new Outer(); outer.print(); } }
结果:
outer_Member:123
outer_Method:123
3. 在一个类中,调用另一个类中的内部类对象的属性和方法
Outer.java
package main.java.nosameclass1; public class Outer {//外部类 private int member=123; //外部类成员 private void outerMethod(){//外部类方法 System.out.println("outer_Method:"+member); } public class Inner {//内部类 private int member = 789;//内部类成员 private void innerMethod(){//内部类方法 System.out.println("inner_Method:"+member); } public void accessOuter(){//内部类访问外部类 System.out.println("outer_Member:"+Outer.this.member); Outer.this.outerMethod(); } } public void print (){ Inner inner = new Inner(); inner.accessOuter(); } }
Test.java
package main.java.nosameclass1; public class Test {//测试类 public static void main(String[] args) { Outer outer = new Outer(); Outer.Inner inner = outer.new Inner(); inner.accessOuter(); } }
结果:
outer_Member:123
outer_Method:123
4. 将一个内部类定义在一个方法中,定义在一个条件名句块中,定义在一个单独的语句块中均可以,但其对外使用的范围也受到相应的限制,不管内部类嵌套的层次有多深,均可以访问外部类的属性及方法。
5. 在方法中定义的内部类,如果要访问方法中定义的本地变量或方法的参数,则变量必须被声明为final.
6. 内部类可以声明为private 或protected;还可以声明为abstract或final.
7. 内部类可以声明为static的,但此时就不能再使用外部类的非static的属性和非静态的方法。
8. 非static的内部类中的属性不能声明为static的,只有最外层或static的内部类中才可以声明static成员。
9. 内部类的派生类
Car.java[外部类和内部类]
package main.java.deriveInnerClass; public class Car {//汽车类(外部类) class Driver{//司机类(内部类) } }
CarDriver.java[ 内部类的派生类]
package main.java.deriveInnerClass; import main.java.deriveInnerClass.Car.Driver; public class CarDriver extends Driver {//派生自内部类(Driver) CarDriver(Car car){ car.super(); //建立内部类与外部类的联系 } }
10. 用内部类实现一个接口
Car.java[接口]
package main.java.anonymous; public interface Car { void run(); void start(); }
Audi.java
package main.java.anonymous; public class Audi { class Q7 implements Car { public void run() { System.out.println("Q7:run"); } public void start() { System.out.println("Q7:start"); } } Car getCar(){ return new Q7(); } }
Test.java
package main.java.anonymous; public class Test { public static void main(String[] args) { Audi audi = new Audi(); audi.getCar().start(); audi.getCar().run(); } }
结果:
Q7:start
Q7:run
11. 匿名的内部类:
Car.java[接口]
package main.java.anonymous; public interface Car { void run(); void start(); }
Audi.java
package main.java.anonymous; public class Audi { class Q7 implements Car{ public void run() { System.out.println("Q7:run"); } public void start() { System.out.println("Q7:start"); } } Car getCar(){ // return new Q7(); return new Car(){//匿名的内部类 public void run() { System.out.println("Q8:run"); } public void start() { System.out.println("Q8:start"); } }; } }
Test.java
package main.java.anonymous; public class Test { public static void main(String[] args) { Audi audi = new Audi(); audi.getCar().start(); audi.getCar().run(); } }
结果:
Q8:start
Q8:run
发表评论
-
Springboot项目(整合WebService带协议头验证+WebSocket+Web+动态日志输出)
2020-05-12 14:05 1003环境配置: springboot 1.5.14 ... -
activiti5.18 默认查询的sql生成两个order by
2019-10-17 12:14 331<spring.version>4.2.4.RE ... -
springboot 定时任务重复执行
2019-06-04 17:35 2091开发一数据接收WebService,里面用到定时任务@Sc ... -
mybatis-generator自动生成代码[增加Service的生成]
2016-03-22 10:08 9745源码包见附件[Maven项目,在1.3.2基础上修改官方源码] ... -
网络状态监控
2014-06-27 12:56 582import java.io.BufferedReader; ... -
Spring MVC+Jquery Ajax 前后台传递Json对象
2014-03-29 10:02 6094关于Spring MVC3.X 接收和返回Json ... -
同时启动多个Tomcat服务器
2013-10-25 17:15 549我所用Tomcat服务器都为zip版,非安装版。以两个为例: ... -
md5+BASE64加密
2013-10-08 23:20 940import sun.misc.BASE64Encoder; ... -
用MD5对密码进行加密
2013-08-10 15:21 970package com.yong.bin.md5; i ... -
把CST格式的字符串转成普通的日期格式
2013-02-27 15:58 1500public static void main(Str ... -
Springmvc3+Spring3+MyBatis3
2012-11-27 15:03 1318最近写的一个三层框架:Springmvc3+Spring3+ ... -
自定义标签
2012-10-26 17:13 0<?xml version="1.0" ... -
log4j.properties
2012-10-24 12:32 0log4j.rootLogger=INFO, log4j ... -
通用Ajax设计
2012-10-21 10:20 1921利用Servlet和反射技术实现通用的Ajax调用设计,如下: ... -
导入Jar包的快捷键
2012-07-02 22:47 1120导入当前光标所在的地方未导入的Jar包: shift+ctrl ... -
Extjs grid 后台
2012-05-22 08:16 0public String gridRecordsByXML( ... -
Extjs 布局
2012-04-18 12:27 0<%@ page language="java ... -
FreeMarker在java项目中的应用
2011-02-15 21:34 3171一、体验FreeMarker FreeMar ... -
动态代理 [用cglib实现]
2011-02-09 10:28 1191一. 用cglib 实现java 的動態代理 ... -
动态代理 [用jdk实现]
2011-02-08 16:41 1137一. java 的jdk動態代理 ...
相关推荐
IBM java培训内部资料——Java 常用类讲解.pptx
Java 开发--基于JSP技术的猎头公司管理软件的设计和实现——内部事务部分(源代码+论文)
基于JSP技术的猎头公司管理软件的设计和实现——内部事务部分(源代码+论文)_jsp_java源程序代码.rar
基于JSP技术的猎头公司管理软件的设计和实现——内部事务部分(源代码+论文)
基于JSP技术的猎头公司管理软件的设计和实现——内部事务部分(源代码+论文).zip
本版也不例外,它反映了Java SE 6的新特性,全书共14章,包括Java基本的程序结构、对象与类、继承、接口与内部类、图形程序设计、事件处理、Swing用户界面组件、部署应用程序和Applet、异常日志断言和调试、泛型程序...
全书共14章,包括Java基本的程序结构、对象与类、继承、接口与内部类、图形程序设计、事件处理、Swing用户界面组件、部署应用程序和Applet、异常日志断言和调试、泛型程序设计、集合以及多线程等内容。. 全书对Java...
本版也不例外,它反映了Java SE 6的新特性,全书共14章,包括Java基本的程序结构、对象与类、继承、接口与内部类、图形程序设计、事件处理、Swing用户界面组件、部署应用程序和Applet、异常日志断言和调试、泛型程序...
4、Java数据库操作(JDBC):JDBC首先并不能算是一门技术,更多的应该算是一种服务 —— Java提 供的数据库访问服务,里面提供了大量的操作接口,各个数据库生产商根据这些接口实现自己的数据库操作,从面向对象的...
【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、...
内部类 反射 序列化 nIo 匿名类 包装类 优先级 引用 语言工具类库 容器类 集合 链表 map 工具类 系统类 日期类 数字类 字符串+正则 流 字符流 字节流 语言特性 继承 封装 多态 JVM 多...
对于想将Java应用于实际项目中的程序员来说,《Java核心技术——基础知识》修订版是一本权威性的指导书籍。对于Java SE 6平台的全部更新,这本实用的教程和可靠的参考书通过大量测试过的示例说明了最重要的语言特性...
Java非对称加密源程序代码实例,本例中使用RSA加密技术,定义加密算法可用 DES,DESede,Blowfish等。 设定字符串为“张三,你好,我是李四” 产生张三的密钥对(keyPairZhang) 张三生成公钥(publicKeyZhang...
4.13.2内部类访问外部类的成员182 4.13.3内部类之间的相互使用185 4.13.4在外部使用内部类186 4.13.5匿名内部类187 4.13.6内部类的作用188 4.14包189 4.14.1包的创建189 4.14.2包的使用191 4.14.3JAR文件的...
Java语言编程规范,来自——华为技术有限公司企业技术规范
020515_【第5章:面向对象基础】_内部类笔记.pdf 020516_〖第5章:面向对象基础〗_实例讲解—系统登陆笔记.pdf 020517_〖第5章:面向对象基础〗_实例讲解—单向链表(1)笔记.pdf 020518_〖第5章:面向对象基础〗_...