`
Jatula
  • 浏览: 279988 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

工作偷懶篇:JAVA:Inner Class=C++:Nested Class

阅读更多

    還是開門見山:住在山里;

為什么需要內部類?有什么好處呢?感覺不用也沒什么,我也這樣任為的,不過一定要好處了--費話

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()

         {

             ......

         }

 

例子:

 

 

0
0
分享到:
评论

相关推荐

    Nested Class (一般是C++的说法),Inner Class (一般是JAVA的说法)

    Nested Class (一般是C++的说法),Inner Class (一般是JAVA的说法)

    java错误处理:java.lang.OutOfMemoryError: Java heap space

    ### Java 错误处理:java.lang.OutOfMemoryError: Java heap space 在Java应用程序开发过程中,经常遇到的一个问题就是内存溢出错误,特别是在处理大量数据或长时间运行的应用时。其中,“java.lang....

    java.lang.OutOfMemoryError: Java heap space 解决方法

    "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程序在运行过程中可能会遇到各种异常,其中"nested exception is java.lang.OutOfMemoryError: Java heap space"是一个常见的问题,通常发生在程序试图分配超过堆内存限制的空间时。这个错误表明Java虚拟机(JVM...

    Java内部类(innerclass).docx

    嵌套类主要分为两大类:**静态嵌套类**(Static Nested Class)和**内部类**(Inner Class)。这两类之间的主要区别在于它们是否可以访问外部类的实例变量。 ##### 2.1 静态嵌套类 - **定义**:被`static`关键字...

    java易混淆概念Anonymous Inner Class

    Java编程语言中存在一些易混淆的概念,今天我们将探讨 Anonymous Inner Class、final、finally、finalize 的区别,Static Nested Class 和 Inner Class 的不同,&和&&的区别,HashMap 和 Hashtable 的区别,...

    java-内部类(InnerClass)详解.pdf

    内部类分为几种类型,包括静态成员类(Static member class)、局部内部类(Local inner class)、匿名内部类(Anonymous inner class)以及嵌套接口(Nested interface)。在本讨论中,我们将主要聚焦于静态成员类...

    java-嵌套类(inner class)-来自oracle官网

    嵌套类主要分为两大类:静态嵌套类(Static Nested Class)和非静态嵌套类(Non-static Nested Class),后者通常被称为内部类(Inner Class)。 - **静态嵌套类**:此类嵌套类被声明为`static`,因此它们与外部类...

    启动tomcat时 错误: 代理抛出异常 : java.rmi.server.ExportException: Port already in use: 1099的解决办法

    nested exception is: java.net.BindException: Address already in use: JVM_Bind  这里说的是1099端口被其它进程占用了. 二.解决办法  找出占用1099端口的进程,进入windows命令,查看什么进程占用了1099端口...

    记录java.lang.OutOfMemoryErrorJava heap space的情况.docx

    Java虚拟机(JVM)是Java应用程序的运行环境,它负责执行字节码并管理内存。在Java程序中,`java.lang.OutOfMemoryError: Java heap space` 是一个常见的错误,意味着程序在运行过程中耗尽了JVM分配的堆内存。这个...

    JAVA程序员32问

    Java 面试题 经典 第一,谈谈final, finally, finalize的区别。...第三,Static Nested Class 和 Inner Class的不同,说得越多越好(面试题有的很笼统)。 第四,&和&&的区别。 第五,HashMap和Hashtable的区别。

    文章分类:Java编程,java面试题1

    3. **静态嵌套类(Static Nested Class)与内部类(Inner Class)的区别:** - 内部类(Inner Class):需要外部类对象实例化,可以直接访问外部类的所有成员(包括私有成员),并且可以定义非静态方法和变量。 - ...

    深入浅析Java中Static Class及静态内部类和非静态内部类的不同

    Java中的静态内部类(Static Class),也称为嵌套静态类,是Java语言提供的一种独特机制,它允许我们在一个外部类内部定义一个静态的类。这种类的声明前面带有`static`关键字,与普通的内部类(非静态内部类)有所...

    JAVA程序员面试32问

    #### 第三,Static Nested Class 和 Inner Class的不同,说得越多越好(面试题有的很笼统)。 - **Inner Class**:内部类是在另一个类的定义内部定义的类。内部类可以访问外部类的所有成员,包括私有成员。它们与外部...

    Tomcat启动时报错:java.lang.UnsatisfiedLinkError的解决

    问题 之前tomcat启动老是报错,虽然不影响项目的启动运行,但是有强迫症的程序员会心里不爽: 如下: 问题分析 由于本机安装的jdk版本与tomcat中使用的jdk版本不一致导致的。 解决方法 后面我把原先tomcat启动环境...

    wsdl生成java客户端报错问题解决方法

    解决使用wsdl生成java客户端报错:java.lang.reflect.invocationtargetexception的方法之一

    变态JAVA面试32问

    * Nested Class(一般是 C++ 的说法),Inner Class(一般是 JAVA 的说法)。 * Java 内部类与 C++ 嵌套类最大的不同就在于是否有指向外部的引用上。 4. & 和 && 的区别: * & 是位运算符。 * && 是布尔逻辑运算符...

Global site tag (gtag.js) - Google Analytics