還是開門見山:住在山里;
為什么需要內部類?有什么好處呢?感覺不用也沒什么,我也這樣任為的,不過一定要好處了--費話
PS:用得最多的,假設有一個接口,這個接口里面一個方法的名字,參數和你的類中的方法一個樣,咋辦--修改名稱了,最直接,但還是有另一種方法,用內部類--特性:內部類對外部類的所有內容都可以訪問;
前面都是費話,騙稿費的,下面來真的:
封装性:把你的秘密藏起來;
package cn.lake.test;
/**
* @Description 白癡者
* @author Lake_Xie
*
*/
public interface Fool {
int value();
}
package cn.lake.test;
/**
* @Description 聰明者
* @author Lake_Xie
*
*/
public interface Acumen {
String goal();
}
package cn.lake.test;
public class Cry {
/**
* @Description 傻子坐
*
* @author Lake_Xie
*
*/
private class Sit implements Fool {
private int i = 11;
//重寫
public int value() {
return i;
}
}
/**
* @Description 醒目躺
*
* @author Lake_Xie
*
*/
protected class Lie implements Acumen {
private String label;
private Lie(String lieTo) {
label = lieTo;
}
//重寫
public String goal() {
return label;
}
}
public Acumen comeOn(String s) {
return new Lie(s);
}
public Fool laugh() {
return new Sit();
}
}
package cn.lake.test;
/**
* @Description 哭一下試試
* @author Lake_Xie
*
*/
class TestCry {
public static void main(String[] args) {
Cry p = new Cry();
Fool c = p.laugh();
Acumen d = p.comeOn("Lake_xie");
}
}
說明:先有Cry再來Fool和Acumen因為非靜態的;
好處多多:內部類對象可以訪問創建它的外部類對象的內容-也包括變量(公私都可以),不過還前提,內部類對象必須有指向外部類對象的引用。也對前面說明那個非靜態誰先創建一個說明補充吧;
實質:JAVA編譯器在創建內部類對象時,隱式的把其外部類對象的引用也傳了進去,一起保存,就得到一個結果:內部類對象始終可以訪問其外部類,不允許出現靜態的數據包括方法;
package cn.lake.test;
public class Cry {
//加加加
private int count=10;
/**
* @Description 傻子坐
*
* @author Lake_Xie
*
*/
private class Sit implements Fool {
private int i = 11-count;
//重寫
public int value() {
return i;
}
}
/**
* @Description 醒目躺
*
* @author Lake_Xie
*
*/
protected class Lie implements Acumen {
private String label;
private Lie(String lieTo) {
label = lieTo;
}
//重寫
public String goal() {
return label;
}
}
public Acumen comeOn(String s) {
return new Lie(s);
}
public Fool laugh() {
return new Sit();
}
}
如果再倒霉碰到外部變量和內部一樣,那只能用this了;
有點煩那就來試試靜態的怎么樣!因為非靜態的說了;
靜態內部類:
無法表達我的心意只能說區別吧:
1. 沒有指向外部的引用;
2. 可以有多層嵌套,可以靜態數據或者非靜態數據;
局部內部類:
package cn.lake.test;
/**
* <pre>
* 代碼在內部
* </pre>
* @author Lake_Xie
*
*/
public class CryOne {
public Acumen comeOn(String s) {
class Lie implements Acumen {
private String label;
private Lie(String lieTo) {
label = lieTo;
}
public String goal() {
return label;
}
}
return new Lie(s);
}
public static void main(String[] args) {
CryOne g = new CryOne();
Acumen d = g.comeOn("Lake_xie");
}
}
comeOn的方法定義了一個內部類,處理完了返回一個對象,他只有這個作用了,按需要去做了;
接下業引用別人一個例子:
package cn.lake.test;
public class CryTwo {
private void internalTracking(boolean b) {
if (b) {
class TrackingSlip {
private String id;
TrackingSlip(String s) {
id = s;
}
String getSlip() {
return id;
}
}
TrackingSlip ts = new TrackingSlip("slip");
String s = ts.getSlip();
}
}
public void track() {
internalTracking(true);
}
public static void main(String[] args) {
CryTwo g = new CryTwo();
g.track();
}
}
你不能在if之外創建這個內部類的對象,因為這已經超出了它的作用域。不過在編譯的時候,內部類TrackingSlip和其他的類一樣同時被編譯,只不過它由它自已的作用域,超出這個范圍就無效,除此之外它和其他內部類一樣;
匿名內部類:
語法:
new interfaceName()
{
......
}
new superclassName()
{
......
}
例子:
分享到:
相关推荐
Nested Class (一般是C++的说法),Inner Class (一般是JAVA的说法)
### Java 错误处理:java.lang.OutOfMemoryError: Java heap space 在Java应用程序开发过程中,经常遇到的一个问题就是内存溢出错误,特别是在处理大量数据或长时间运行的应用时。其中,“java.lang....
"Java.lang.OutOfMemoryError: Java heap space 解决方法" Java.lang.OutOfMemoryError: Java heap space 是 Java 中的一个常见错误,它发生时,Java 虚拟机 (JVM) 无法分配对象,因为堆空间不足。下面是解决该问题...
Java程序在运行过程中可能会遇到各种异常,其中"nested exception is java.lang.OutOfMemoryError: Java heap space"是一个常见的问题,通常发生在程序试图分配超过堆内存限制的空间时。这个错误表明Java虚拟机(JVM...
嵌套类主要分为两大类:**静态嵌套类**(Static Nested Class)和**内部类**(Inner Class)。这两类之间的主要区别在于它们是否可以访问外部类的实例变量。 ##### 2.1 静态嵌套类 - **定义**:被`static`关键字...
Java编程语言中存在一些易混淆的概念,今天我们将探讨 Anonymous Inner Class、final、finally、finalize 的区别,Static Nested Class 和 Inner Class 的不同,&和&&的区别,HashMap 和 Hashtable 的区别,...
内部类分为几种类型,包括静态成员类(Static member class)、局部内部类(Local inner class)、匿名内部类(Anonymous inner class)以及嵌套接口(Nested interface)。在本讨论中,我们将主要聚焦于静态成员类...
嵌套类主要分为两大类:静态嵌套类(Static Nested Class)和非静态嵌套类(Non-static Nested Class),后者通常被称为内部类(Inner Class)。 - **静态嵌套类**:此类嵌套类被声明为`static`,因此它们与外部类...
nested exception is: java.net.BindException: Address already in use: JVM_Bind 这里说的是1099端口被其它进程占用了. 二.解决办法 找出占用1099端口的进程,进入windows命令,查看什么进程占用了1099端口...
Java虚拟机(JVM)是Java应用程序的运行环境,它负责执行字节码并管理内存。在Java程序中,`java.lang.OutOfMemoryError: Java heap space` 是一个常见的错误,意味着程序在运行过程中耗尽了JVM分配的堆内存。这个...
Java 面试题 经典 第一,谈谈final, finally, finalize的区别。...第三,Static Nested Class 和 Inner Class的不同,说得越多越好(面试题有的很笼统)。 第四,&和&&的区别。 第五,HashMap和Hashtable的区别。
3. **静态嵌套类(Static Nested Class)与内部类(Inner Class)的区别:** - 内部类(Inner Class):需要外部类对象实例化,可以直接访问外部类的所有成员(包括私有成员),并且可以定义非静态方法和变量。 - ...
Java中的静态内部类(Static Class),也称为嵌套静态类,是Java语言提供的一种独特机制,它允许我们在一个外部类内部定义一个静态的类。这种类的声明前面带有`static`关键字,与普通的内部类(非静态内部类)有所...
#### 第三,Static Nested Class 和 Inner Class的不同,说得越多越好(面试题有的很笼统)。 - **Inner Class**:内部类是在另一个类的定义内部定义的类。内部类可以访问外部类的所有成员,包括私有成员。它们与外部...
问题 之前tomcat启动老是报错,虽然不影响项目的启动运行,但是有强迫症的程序员会心里不爽: 如下: 问题分析 由于本机安装的jdk版本与tomcat中使用的jdk版本不一致导致的。 解决方法 后面我把原先tomcat启动环境...
解决使用wsdl生成java客户端报错:java.lang.reflect.invocationtargetexception的方法之一
* Nested Class(一般是 C++ 的说法),Inner Class(一般是 JAVA 的说法)。 * Java 内部类与 C++ 嵌套类最大的不同就在于是否有指向外部的引用上。 4. & 和 && 的区别: * & 是位运算符。 * && 是布尔逻辑运算符...