- 浏览: 438238 次
- 性别:
- 来自: 芜湖
文章分类
- 全部博客 (188)
- 架构 (28)
- 数据库 (8)
- WEB开发 (30)
- 项目管理 (22)
- 敏捷开发 (11)
- 测试 (5)
- JAVA (30)
- 其它 (2)
- SPRING (13)
- 改BUG (4)
- 读书 (2)
- 小工具 (3)
- 杂文 (0)
- XQuery (1)
- JAVA虚拟机 (1)
- maven (8)
- weblogic (4)
- GIT (6)
- LINUX (9)
- JENKINS (1)
- NEXUS (0)
- webservice (3)
- TOMCAT (4)
- JBOSS (1)
- 管理 (1)
- STRUTS (3)
- ehcache (1)
- android (4)
- apache (3)
- NGINX (6)
- 产品经理 (2)
- HIBERNATE (2)
- JPA (1)
- freemarker (4)
- SPRING MVC (4)
- JQUERY (7)
- oracle (1)
- SSO (4)
- 移动开发 (2)
- IntelliJ IDEA (2)
- 草稿 (0)
- quartz (1)
- xpath (1)
- selenium (2)
- swing (4)
- JAVA 线程 (3)
- proguard (1)
- 大数据 (3)
- Flume (2)
- scala (1)
- json (1)
- dubbo (1)
- kettle (1)
- FastDFS (1)
- memcached (1)
- 物联网 (4)
- mysql (1)
最新评论
-
hefengjun1:
还有屌丝啊
团队需要的6种人 -
z390174504:
非常好啊......
maven中把依赖的JAR包一起打包 -
lq675964355:
为什么我执行(生成的不以-jar-with-depend ...
maven中把依赖的JAR包一起打包 -
phoenix5870:
怒赞一个!!!很棒!
maven中把依赖的JAR包一起打包 -
string2020:
关键是,我想mvn package就打包好,请问,怎么做
maven中把依赖的JAR包一起打包
什么是内部类,匿名类,匿名接口,匿名方法?
内部类有什么特点?
内部类有哪些应用?
JAVA语言是一个JAVA文件名对应一个类名称,在类作用域里面所定义的类就是内部类,它可以是静态,或是非静态的。而我们关注的大部分是非静态内部类。为什么要定义内部类呢?
从面向对象来讲,比如人有心脏,人被定义成类后,心脏是其身体必要的一部分,在设计时,我们可以把心脏定义成外部类,但是设计成内部类不是更加符合现实意义吗?是的。
对于现实世界中的场景抽象,很多都需要内部类的支持。当然这不仅仅是SUN公司设计出内部类的唯一用处,内部类最大的特点就是其不是单一存在,其还有一个外部对象的引用,在内部类中可以任意操作外部对象的属性和方法,包括private。我引用了《Think in Java》中的代码。
package thinkInJava; public class Outer { private int o_a = 10; public void print() { System.out.println(o_a); } public Inner newInner() { return new Inner(); } class Inner { private int i_b = 5; public Outer getOuter() { return Outer.this; } public void showstop() { System.out.println(o_a); } } public static void main(String args[]) { Outer outer = new Outer(); Inner inner = outer.newInner(); inner.getOuter().print(); inner.showstop(); } }
所以说脱离了外部对象,内部对象是不可能存在的(静态内部类除外)。同样代码附上。
package thinkInJava; public class Outer { private int o_a = 10; public void print() { System.out.println(o_a); } public Inner newInner() { return new Inner(); } static class Inner { private int i_b = 5; public void print(){ System.out.println(i_b); } public void haveATry() { i_b++; } } public static void main(String args[]) { Outer outer = new Outer(); Inner inner = outer.newInner(); inner.print(); inner.haveATry(); Outer.Inner inner1 = new Inner(); inner1.print(); Outer outer1 = new Outer(); Inner inner2 = outer1.newInner(); inner2.print(); } }
这里有一点,是Inner没办法用.this来获取外部类实例,
有一些注意点,一是非内部类中是不允许有内部变量、方法或类,即不允许定义静态内部成员
因为静态变量的作用就是让所有类对象共享一个状态,而这和内部类要依赖外部类对象存在产生矛盾。
内部类可以继承类或实现接口。典型的类子可以看一看HashMap,HashTable的源码,里面定义了Entry内部类,而且此内部类实现了Map.Entry的接口。
二是我们也应该关注到SUN引入内部类的又一优点,就是变相实现了JAVA多重继承,本身一个类是没办法继承多个类的,但是可以定义多个内部类,之后对内部类的一系列操作来实现这个特点。当然,你也可以用asm来实现JAVA多重继承。
public class Outer { class InnerA extends A { } class InnerB extends B { } ...... }
三是内部类下面还可以再定义内部类,理论上应该可以无限嵌套下去(这个没试过……)。
四是可以匿名定义类,接口。最相关的实例就是SWING中GUI的事件驱动模型,和声明各种监听器。
五是内部类/接口可以被继承/实现,但是初始化要同时关联到内部类的外部对象
package thinkInJava; class WithInner{ class Inner{} } public class Outer extends WithInner.Inner{ public Outer(WithInner wi){ wi.super(); } public static void main(String args[]) { WithInner wi = new WithInner(); Outer t = new Outer(wi); } }
六是内部类不可以被外部类的子类覆盖,二者是独立存在的。
package thinkInJava; public class Outer { class WithInner { class Inner { public void print() { System.out.println("super inner class"); } } } class InheritWithInner extends WithInner { class Inner { public void print() { System.out.println("child inner class"); } } public Inner newInner() { return new InheritWithInner.Inner(); } public WithInner.Inner newInner1() { return new WithInner.Inner(); } } public void test() { InheritWithInner tt = new InheritWithInner(); tt.newInner().print(); tt.newInner1().print(); } public static void main(String args[]) { Outer outer = new Outer(); outer.test(); } }
对于内部类,自己还是需要大量时间去使用,去体会。适时用,用的好。
发表评论
-
Java的clone():深复制与浅复制
2018-09-05 17:27 382Java中要想自定义类的 ... -
java http java.security.ProviderException: java.security.KeyException
2016-07-12 18:47 1451Google Bait This post isn't a ... -
JAVA clone 复制 inputstream
2016-05-20 15:47 1647ByteArrayOutputStream baos = n ... -
Java总结篇系列:Java多线程
2016-05-17 12:54 472多线程作为Java中很重 ... -
运用 BoxLayout 进行 Swing 控件布局
2016-05-03 12:30 371引言 在用户使用 Java Swing 进行用户界面开发过 ... -
SWING实现像QQ一样,在右下角弹出提示框
2016-05-01 11:33 394像QQ一样,在右下角弹出提示框,重点就是提示窗口的屏幕定位。 ... -
jar命令的用法详解
2016-04-28 12:25 455[转:http://www.jb51.net/a ... -
解读JAVA 的ClassLoader
2016-02-15 10:52 570[转:http://www.iteye.com/top ... -
百万级访问网站前期的技术准备
2016-01-28 14:49 445作为一个技术从业者十年,逛了十年发现有些知识东一榔头西一棒槌的 ... -
JAVA,导出CSV,设最大行数限制,使用winzipaes压缩成带密码的zip文件
2015-05-03 11:27 2554[转:http://blog.csdn.net/lian_z ... -
JAVA SWING 漂亮的框架
2015-04-21 20:10 863http://www.iteye.com/problems ... -
struts2采用convention-plugin实现零配置
2015-01-28 14:38 617转[http://javeye.iteye.com/blog ... -
显示CLASS源于哪个JAR包
2015-01-26 15:03 724在编程的时候如果在工程中无意中导入多个同样的jar文件,只是 ... -
Servlet 3.0 新特性详解
2014-11-25 10:47 653转【http://www.ibm.com/devel ... -
JAVA获取计算机CPU、硬盘、主板、网络等信息
2014-11-01 22:06 1520l转[http://www.cnblogs.com/jife ... -
java读取文件和写入文件的方式
2014-09-13 12:28 628[转:http://jaczhao.iteye.com/bl ... -
java 实现调用链接并获取返回值
2013-10-22 16:10 0URL u = null; HttpURLConnec ... -
Eclipse中启动JBoss 5.1 报Deployment "AttachmentStore" 错误
2013-10-15 14:19 1720今天在Eclipse中启动JBoss 5.1时遇到这样的一个 ... -
java调用OPENSSL生成双向SSL的WEB-SERVICE
2013-06-25 21:34 5775上一篇提到在NGINX中配置了双向SSL的验证, 签名信息 ... -
JAVA对称加密算法
2013-05-28 16:02 876[转:http://liulang203.iteye.com ...
相关推荐
7.6.6 从内部类继承 7.6.7 内部类可以覆盖吗? 7.6.8 内部类标识符 7.6.9 为什么要用内部类:控制框架 7.7 构建器和多形性 7.7.1 构建器的调用顺序 7.7.2 继承和 7.7.3 构建器内部的多形性方法的行为 7.8 通过继承...
《Java编程思想习题及答案》是一份针对Java编程学习者的宝贵资源,它包含了大量关于Java编程的习题和对应的解答。这份资料可能是从www.pigkrtv.com等网站转载而来,旨在帮助学习者深化对Java编程语言的理解,提高...
《Java语言程序设计第10版(基础篇)》是一本深入浅出的Java编程教材,旨在帮助初学者掌握这门强大的面向对象编程语言。复习题答案提供了对每一章节核心概念的检验和巩固,帮助读者确认对每个主题的理解是否到位。...
《java2实用教程》涵盖了Java语言的基础知识和一些高级特性,适合初学者系统学习Java编程。以下是书中各章节的知识点总结: 第一章:JAVA语言入门 1.1 JAVA的诞生:介绍了Java语言的历史背景,它是由Sun ...
优质java课件 java程序设计教程(第6版)01.计算机系统概述(共42页).ppt 优质java课件 java程序设计教程(第6版)02.数据与表达式(共62页).ppt 优质java课件 java程序设计教程(第6版)03.使用类和对象(共49页...
### JAVA2参考大全 第四版:Java的起源与演进 #### Java的诞生背景与动机 在探索Java的根源之前,我们先回顾一下计算机语言的发展脉络。B语言的出现催生了C语言,随后C语言的进化衍生出了C++,而今,C++正逐步被...
### 中文 Java编程思想(完整的中文简体第二版) #### 重要知识点概览 本教材由Bruce Eckel撰写,智慧东方工作室翻译,是一本全面深入介绍Java编程语言的经典之作。本书不仅适合Java初学者,也适合希望深入了解Java...
3. Class33.java:可能涉及到面向对象编程,包括封装、继承和多态,如定义类、接口,以及重写`equals()`和`hashCode()`方法。 4. Class07.java:可能与文件操作有关,例如使用`File`类进行文件的创建、读取、写入,...
7.6.6 从内部类继承 7.6.7 内部类可以覆盖吗? 7.6.8 内部类标识符 7.6.9 为什么要用内部类:控制框架 7.7 构建器和多形性 7.7.1 构建器的调用顺序 7.7.2 继承和finalize() 7.7.3 构建器内部的多形性方法的行为 7.8 ...
- **并发编程**:介绍 Java 中实现并发编程的方法和技术。 - **Java 与 Internet**:探索 Java 在网络编程方面的应用。 - **总结**:回顾本章主要内容并进行总结。 ### 第二章:一切都是对象 本章深入探讨了 Java ...
5. **第8章 泛型-枚举-内部类**:泛型提供了类型安全,枚举用于定义常量集合,而内部类则是Java中实现复杂设计模式的重要工具。 6. **第9章 异常**:讲解了如何处理运行时错误和异常,包括try-catch-finally语句块...
- **属性**:`Manager`类拥有的属性包括从`Employee`类继承过来的`name`和`salary`,以及自身定义的`bonus`。 - **方法**:除了继承自`Employee`类的`getName()`和`setSalary()`方法外,`Manager`类还定义了自己的`...
### 使用Java实现数据库编程知识点详解 #### 一、数据库的设计 **1. 规范设计数据库的步骤** - **收集信息**:明确需求,包括业务流程、数据需求等。 - **标识实体**:识别出系统中需要存储的主要对象或概念。 - ...
在本资源中,我们主要关注的是“Java语言程序设计(第二版)”一书的第三章课后习题答案,特别是那些涉及编程代码的问题。Java是一种广泛应用的面向对象的编程语言,以其平台无关性、安全性和高效性而受到赞誉。在...
为了使读者能够顺利地用Java实现遗传算法,书中会回顾Java编程的基础知识,包括数据类型、控制结构、类与对象、接口、异常处理、多线程等,确保读者具备必要的编程技能。 三、遗传算法的Java实现 书中将详细阐述...
"用于回顾java基础知识"的标题和描述暗示了我们将探讨的是Java的基础概念,这可能包括语法、类、对象、数据类型、控制结构等核心概念。下面我们将深入这些主题,帮助你巩固Java编程的基础。 1. **Java简介**:Java...
《基于JAVA编程的坦克大战》是一款使用Java编程语言开发的经典射击游戏,其核心特性包括查看历史记录、单双人模式、背景音乐、地图更换、游戏难度调整以及详细的游戏说明。这款游戏中,玩家可以独自作战或者与朋友...
- Java多线程编程的基础知识,如创建线程的方式(继承Thread类或实现Runnable接口)、同步机制(synchronized、volatile关键字)。 8. 常用类库 - Java标准库中提供的常用类,例如集合框架(Collection Framework...