`
zealotds
  • 浏览: 122802 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

Java点滴: Nested Class

    博客分类:
  • java
阅读更多
参考贴:内部类详解
tag: java,nested class

Why do we need it?

  • It is a way of logically grouping classes that are only used in one place.
  • It increases encapsulation.
  • Nested classes can lead to more readable and maintainable code.

More scenario-sense

  • 内部类提供了某种进入外围类的窗户。
  • 每个内部类都能独立地继承一个接口,而无论外围类是否已经继承了某个接口。

因此,内部类使多重继承的解决方案变得更加完整。在项目中,需要多重继承,如果是两个接口,那么好办,接口支持多重继承。如果是两个类呢?这时只有使用内部类了。

Sample
public class NestedClassDemo {
	
	private int _value = 1;
	private static String _id = "1";	
	
	// 1. member class, defined in class
	//    inner class, scope: member
	private class InnerA {
		private int _value;
		public InnerA(int value) {
			_value = value;
		}
		public void readOuterA() {
			// accessing outer class' member directly
			System.out.println(_value);
		}		
		public void readOuterB() {
			// accessing outer class' member alternatively
			System.out.println(NestedClassDemo.this._value);
		}
	}
	
	public void foo() {
		// 2. local class, defined in method, compiled with method
		//    inner class, scope: local (stack)
		class InnerB {
			public void show() {
				System.out.println("NestedB defined in method");
			}
		}
		// must be called afterwards
		new InnerB().show();
	}
	
	public Object createAnonymous() {
		final String temp = "anonymous";
		// 3. anonymous inner class
		//    inner class, scope: point it is defined
		return new Object() {			
			private int _value;	
			private String _id;
			// initializer, using alternative way to resolve conflict
			{
				_value = NestedClassDemo.this._value;
				_id = temp; // can only refer to final local variable
			} 
			public String toString() {
				return _id + _value;
			}
		};
	}
	
	// 4. nested static class, behaviors like a top-level class
	//    non-inner class, scope: (static) member 
	private static class Nested {
		public void readOuter() {
			// can access only static fields
			System.out.println(_id);
		}
	}

	public static void main(String[] args) {
		
		NestedClassDemo nc = new NestedClassDemo();		
		// initialization: outerObj.new 
		NestedClassDemo.InnerA a = nc.new InnerA(nc._value);
		// InnerA a = nc.new InnerA(); // is acceptable here
		a.readOuterA();
		a.readOuterB();
		
		NestedClassDemo.Nested n = new NestedClassDemo.Nested();
		// Nested n = new Nested(); // is acceptable here		
		n.readOuter();
	}	
}

public interface Service {
	void serve();
}

public interface ServiceFactory {
	Service getService();
}

public class ServiceImpl implements Service {	
	public void serve() {
		// do something
	}
	public static ServiceFactory getService() {
		return new ServiceFactory() {			
			public Service getService() {
				return new ServiceImpl();
			}
		};
	}
}
分享到:
评论

相关推荐

    java解决nested exception is java.lang.OutOfMemoryError Java heap space

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

    NEVE:Nested Virtualization Extensions for ARM

    为了解决这一性能瓶颈问题,研究者们提出了一种新的技术,即NEVE(Nested Virtualization Extensions for ARM)。NEVE通过一系列简化的架构改变,允许软件合并和延迟陷阱处理,即通过记录hypervisor指令的结果,直到...

    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.7.A.Comprehensive.Tutorial

    Chapter 14 Nested and Inner Classes Chapter 15 Swing Basics Chapter 16 Swinging Higher Chapter 17 Polymorphism Chapter 18 Annotations Chapter 19 Internationalization Chapter 20 Applets Chapter 21 Java...

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

    "Java.lang.OutOfMemoryError: Java heap space 解决方法" Java.lang.OutOfMemoryError: Java heap space 是 Java 中的一个常见错误,它发生时,Java 虚拟机 (JVM) 无法分配对象,因为堆空间不足。下面是解决该问题...

    解决Java_heap_space问题

    ### 解决Java_heap_space问题:深入理解与策略 在Java应用程序开发与运行过程中,经常会遇到一个常见的内存管理问题——“Java heap space”。这个问题通常表现为Java虚拟机(JVM)在执行过程中因可用堆内存不足而...

    Spring Nested事务简单案例

    接下来,`Nested`文件可能包含了具体的Java代码,这些代码展示了如何在Spring应用中设置和使用Nested事务。通常,Spring的`PlatformTransactionManager`接口是处理事务的核心,而`@Transactional`注解则用于声明方法...

    java代码-Nested

    内部类有两种形式:静态内部类(Static Nested Class)和非静态内部类(Non-static Nested Class)。 - **非静态内部类**:非静态内部类需要一个外部类的对象来实例化,它可以直接访问外部类的非静态成员。这种...

    asm5.0.jar

    nested exception is org.springframework.core.NestedIOException: Failed to parse config resource: class path resource [mybatis- config.xml]; nested exception is org.apache.ibatis.builder....

    java head space.txt

    nested exception is java.lang.OutOfMemoryError: Java heap space org.springframework.web.util.NestedServletException: Handler dispatch failed; nested exception is java.lang.OutOfMemoryError: Java heap...

    JAVA程序员32问

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

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

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

    java.lang.NoSuchFieldError Companion

    java.lang.NoSuchFieldError: Companion 问题的解决方案

    JAVA程序员面试32问

    OuterClass.StaticNestedClass nested = new OuterClass.StaticNestedClass(); ``` 总结起来,Inner Class和Static Nested Class的主要区别在于: 1. **依赖性**:Inner Class实例化需要外部类的实例;而Static ...

    Java内部类(innerclass).docx

    OuterClass.StaticNestedClass nestedObj = new OuterClass.StaticNestedClass(); ``` ##### 2.2 内部类 - **定义**:未被`static`关键字修饰的类被称为内部类。 - **特点**: - 必须依赖于外部类的实例存在...

    面试Java程序员最可能遇到的问题考试大全

    16. **Static Nested Class和Inner Class的区别**:静态嵌套类与外部类之间没有隐含引用,而内部类有;内部类可以访问外部类的私有成员,静态嵌套类不行。 17. **assert的使用**:用于断言,测试代码的正确性。 18. ...

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

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

Global site tag (gtag.js) - Google Analytics