- 浏览: 449767 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
尼古拉斯.fwp:
...
HttpClient模拟表单multipart/form-data方式上传文件和参数 -
绿茵好莱坞:
好文,非常不错
HttpClient模拟表单multipart/form-data方式上传文件和参数 -
dotku:
运行 mvn clean install 出现报错信息> ...
可运行war包,命令行启动war包 -
woxiangbo:
多行合并成1行,可用 GROUP_CONCAT 函数
sql 查询结果格式化 -
woxiangbo:
iframe获取父框架的 某个元素的值,直接在iframe的j ...
js 跨 frame操作对象
一、 定义
放在一个类的内部的类我们就叫内部类。
二、 作用
1.内部
类可以很好的实现隐藏
一般的非内部类,是不允许有 private 与protected权限的,但内部类可以
2.内部类拥有外围类
的所有元素的访问权限
3.可是实现多重继承
4.可以避免修改接口而实现同一个类中两种同名方法的调用。
三、 例子
1.
实现隐藏
平时我们对类的访问权限,都是通过类前面的访问修饰符来限制的,一般的非内部类,是不允许有 private
与protected权限的,但内部类可以,所以我们能通过内部类来隐藏我们的信息。可以看下面的例子
接口
package insidecategory; public interface Incrementable { void increment(); }
具体
类
package insidecategory; public class Example { private class InsideClass implements InterfaceTest { public void test() { System.out.println("这是一个测试"); } } public InterfaceTest getIn() { return new InsideClass(); } }
上面加粗的部分是内部类,访问修饰符是private
客
户端程序
package insidecategory; public class TestExample { public static void main(String args[]) { Example a=new Example(); InterfaceTest a1=a.getIn(); a1.test(); } }
加
粗的那部分就是客户端调用的代码,从这段代码里面我只知道Example的
getIn()方法能返回一个InterfaceTest
实例但我并不知道这个实例是这么实现的。而且由于InsideClass
是private的,所以我们如果不看代码的话根本看不到这个具体类的名字,所以说它可以很好的实现隐藏。
2.可以无条件地访问外围类的所有元素
package insidecategory; public class TagBean { private String name="liutao"; private class InTest { public InTest() { System.out.println(name); } } public void test() { new InTest(); } public static void main(String args[]) { TagBean bb=new TagBean(); bb.test(); } }
看上面加粗部分,name这个变量是在TagBean里面定义的私有变量。这个变量在内部类中
可以无条件地访问System.out.println(name);
3.可以实现多重继承
个特点非常重要,个人认为它是内部类存在的最大理由之一。正是由于他的存在使得Java的继承机制更加完善。大家都知道Java只能继承一个类,它的多重
继承在我们没有学习内部类之前是用接口来实现的。但使用接口有时候有很多不方便的地方。比如我们实现一个接口就必须实现它里面的所有方法。而有了内部类就
不一样了。它可以使我们的类继承多个具体类或抽象类。大家看下面的例子。
类一
package insidecategory; public class Example1 { public String name() { return "liutao"; } }
类
二
package insidecategory; public class Example2 { public int age() { return 25; } }
类三
package insidecategory; public class MainExample { private class test1 extends Example1 { public String name() { return super.name(); } } private class test2 extends Example2 { public int age() { return super.age(); } } public String name() { return new test1().name(); } public int age() { return new test2().age(); } public static void main(String args[]) { MainExample mi=new MainExample(); System.out.println("姓名:"+mi.name()); System.out.println("年龄:"+mi.age()); } }
大家注意看类三,里面分别实现了两个内部类 test1,和test2 ,test1类又继承了Example1,test2继承了Example2,这样我们的类三MainExample就拥有了Example1和 Example2的方法和属性,也就间接地实现了多继承。
四、 避免修改接口而实现同一个类中两种同名方法的调用。
大家假想一下如果,你的类要继承一个类,还要实现一个接口,可是你发觉你继承的类和接口里面有两个同名的方法怎么办?你怎么区分它们??这就需要我们的内
部类了。看下面的代码
接口
package insidecategory; public interface Incrementable { void increment(); }
类 MyIncrement
package insidecategory; public class MyIncrement { public void increment() { System.out.println("Other increment()"); } static void f(MyIncrement f) { f.increment(); } }
大家看上面加黑的部分,两个方法都是一样的。在看下面这个类要继承这两个类
如果不用内部类
package insidecategory; public class Callee2 extends MyIncrement implements Incrementable { public void increment() { //代码 } }
想问一下大家
increment()这个方法是属于覆盖MyIncrement这里的方法呢?还是Incrementable这里的方法。我怎么能调到
MyIncrement这里的方法?显然这是不好区分的。而我们如果用内部类就很好解决这一问题了。看下面代码
package insidecategory; public class Callee2 extends MyIncrement { private int i=0; private void incr() { i++; System.out.println(i); } private class Closure implements Incrementable { public void increment() { incr(); } } Incrementable getCallbackReference() { return new Closure(); } }
我们可以用内部类来实现接口,这样就不会与外围类
的方法冲突了。
发表评论
-
table_space
2017-04-13 16:56 0SELECT TABLESPACE, MEG ... -
Asset Holdings And Valuation Report 43_example_sql.sql
2016-12-14 15:59 0SELECT securityParAmount.*, ... -
Java垃圾回收机制
2016-01-07 13:37 877Java垃圾回收机制 ... -
swfuplaod 结合common-fileupload servlet 上传文件
2013-08-20 13:35 1189其实 swfupload 就是一个前端上传控件,和后端没什 ... -
java写文件的时候内存溢出
2013-07-24 10:30 8001解决步骤: 1、设置tomcat的jvm参数: 在tom ... -
生成指定位数的随机字符串和数字
2013-01-07 14:37 1538import java.util.Random; ... -
CountDownLatch
2012-12-29 13:22 906有时候会碰到这样一种场景,线程A(主线程)需要等待另外一个线程 ... -
通过Httpclient上传文件
2012-12-26 10:07 1737import java.io.File; import ... -
HttpClient模拟表单multipart/form-data方式上传文件和参数
2012-12-21 15:06 100434主要有三个类,亲试成功: HttpPostEmulator: ... -
eclipse老版本下载
2011-04-07 20:12 1407http://archive.eclipse.org/ecli ... -
JSP读取文件
2010-12-21 21:27 1854想在Jsp中读取一个文本文件非常简单,请看下面的例子: St ... -
JAVA拷贝文件
2010-12-18 18:46 1428public static void CreateDBFil ... -
SQL执行顺序
2010-12-06 09:44 14151、from子句组装来自不同数据源的数据; 2、where子句 ... -
去除List列表中重复值(3种解决方法)
2010-12-03 11:35 2292public static void main(String[ ... -
ubuntu 10.0.4 安装 JDK
2010-10-15 15:48 1682在网上搜的一些信息,安装JDK的方法都过时了 从官网下的JDK ... -
FileInputStream的路径问题
2010-09-21 10:19 3929FileInputstream 要想在JAVA里不写死路径,有 ... -
利用commons-fileupload上传文件
2010-08-09 17:25 1502前端JSp页面: <%@ page language= ... -
JSTL循环
2010-08-06 14:58 1220<c:forEach items="${Roi ... -
MyEclipse8.x无法安装FB4插件的朋友请进
2010-07-14 11:34 2755MyEclipse8.x无法安装FB插件的朋友请进 由于MyE ... -
oracle 存储精确时间 年月日 时分秒的一点个人心得
2010-07-02 16:09 8659我用的是ibatis框架 为了做一个聊天功能,发现不能显示最 ...
相关推荐
扩大内部类作用域的2种方法、内部类获取外部类引用扩大内部类作用域的2种方法内部类的作用域:外部类对象val students = new ArrayBuffer
### Java内部类的作用 #### 一、定义及概念 内部类,顾名思义,指的是一个定义在另一个类内部的类。这样的结构让内部类能够访问外部类的成员(包括私有成员),并且允许内部类拥有不同的访问级别,如`private`、`...
在Java编程语言中,内部类和匿名内部类是两种特殊类型的类,它们为代码的组织和功能实现提供了独特的灵活性。本教程"Java4Android 35_内部类和匿名内部类"深入探讨了这两个概念,旨在帮助开发者更好地理解和运用它们...
局部内部类只存在于某个方法内,它的作用范围更小,通常用于实现特定逻辑。匿名内部类是无名的,通常用于创建一次性使用的简洁实现,比如作为接口的实例。静态内部类则与普通的静态成员类似,不依赖于外部类的实例,...
内部类分为几种类型,包括成员内部类、局部内部类、匿名内部类以及方法参数内部类。 1. **成员内部类**:成员内部类就像是外部类的一个普通成员,可以是静态或非静态的。非静态内部类拥有对外部类的引用,可以直接...
本篇文章将深入探讨Java内部类的作用,包括其分类、访问权限、以及如何创建和使用。 首先,Java内部类分为四种类型:成员内部类、局部内部类、匿名内部类和静态内部类。成员内部类类似于类的成员变量,可以在类的...
成员内部类可以使用final、abstract、public和private四种修饰符,它们的作用与普通类的修饰符相同。 静态嵌套类 静态嵌套类是指使用static关键字定义的内部类。静态嵌套类不能访问外部类的非静态成员变量和方法,...
2. **局部内部类**:局部内部类只存在于某个方法、构造器或者代码块中,它的作用域仅限于该方法、构造器或代码块。下面是一个局部内部类的例子: ```java public class Test1 { public void display() { class ...
局部内部类是在方法或构造器的内部定义的类,它的作用域仅限于该方法或构造器内部。局部内部类可以访问方法或构造器中的所有局部变量,但这些变量必须声明为`final`(最终的)。局部内部类的主要用途是为某个特定的...
- **局部内部类**:定义在方法、构造器或块中的类称为局部内部类,它的作用域仅限于该方法、构造器或块。 - **匿名类**:没有名字的内部类,通常用于一次性实现某个接口或父类的简单功能。 2. **内部类继承** - ...
局部内部类定义在方法或代码块内,其作用域仅限于该方法或代码块。它们通常用于实现特定方法的功能,且只能在该方法内部使用。由于其局部性,局部内部类可以访问方法内的所有局部变量和参数,但这些变量必须是 ...
根据定义和作用域的不同,Java内部类主要分为四类: 1. **嵌套顶级类(Nested Top-Level Classes)**:这种内部类类似于普通的类,但它们被定义在另一个类的内部。它们没有访问外部类的实例变量或方法的能力,除非...
局部内部类只在方法、构造器或者块中定义,其作用域仅限于该方法、构造器或块。这使得局部内部类可以访问它所在范围内的所有变量,包括局部变量,但这些变量必须是final的。局部内部类主要用来实现某个特定功能,其...
内部类的作用域仅限于其外部类,可以访问外部类的成员,同时又能保护类的封装性。 目标: 通过这个源码资源,你将学会以下内容: - 内部类的定义和语法 - 如何在外部类中访问和操作内部类 - 不同类型的内部类(静态...
1.接口-简介 2.接口-作用 3.接口-定义方式 4....内部类-作用 9.内部类-特殊语法规则 10.内部类-安全性 11.内部类-局部内部类 12.内部类-匿名内部类 13.内部类-静态内部类 14.综述
本示例源码提供了关于内部类的全面理解,包括它的三种形式:成员内部类、局部内部类和匿名内部类,以及它们的实现方式和使用注意事项。 首先,我们来看成员内部类。成员内部类就像普通的类成员,可以是静态的或非...
这种特性使得静态内部类在多种场景下都能发挥重要作用,例如在提高性能、优化内存使用以及简化API设计等方面。理解静态内部类的工作原理及其与其他类型内部类的区别对于编写高效且易于维护的Java代码至关重要。
内部类(Inner Class)是Java语言中一个独特的特性,它允许在一个类的内部定义另一个类。这种设计模式在处理特定问题时提供了更大的灵活性,比如实现事件监听器、封装复杂逻辑或者创建私有的辅助类。本章我们将深入...
局部内部类则定义在方法或作用域内,它的生命周期仅限于该方法的执行。匿名内部类通常用于快速实现一个接口或继承一个类,不需要显式命名。静态内部类虽然在形式上类似于成员内部类,但可以独立于外部类实例存在,...
匿名内部类可以访问其所在的作用域内的所有变量,包括final的局部变量。这是因为匿名内部类实际上是在其封闭的类或方法的上下文中编译的,因此它可以访问这些局部变量。对于非final变量,它们必须是effectively ...