参考贴:内部类详解
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虚拟机(JVM...
为了解决这一性能瓶颈问题,研究者们提出了一种新的技术,即NEVE(Nested Virtualization Extensions for ARM)。NEVE通过一系列简化的架构改变,允许软件合并和延迟陷阱处理,即通过记录hypervisor指令的结果,直到...
Nested Class (一般是C++的说法),Inner Class (一般是JAVA的说法)
### Java 错误处理:java.lang.OutOfMemoryError: Java heap space 在Java应用程序开发过程中,经常遇到的一个问题就是内存溢出错误,特别是在处理大量数据或长时间运行的应用时。其中,“java.lang....
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 中的一个常见错误,它发生时,Java 虚拟机 (JVM) 无法分配对象,因为堆空间不足。下面是解决该问题...
### 解决Java_heap_space问题:深入理解与策略 在Java应用程序开发与运行过程中,经常会遇到一个常见的内存管理问题——“Java heap space”。这个问题通常表现为Java虚拟机(JVM)在执行过程中因可用堆内存不足而...
接下来,`Nested`文件可能包含了具体的Java代码,这些代码展示了如何在Spring应用中设置和使用Nested事务。通常,Spring的`PlatformTransactionManager`接口是处理事务的核心,而`@Transactional`注解则用于声明方法...
内部类有两种形式:静态内部类(Static Nested Class)和非静态内部类(Non-static Nested Class)。 - **非静态内部类**:非静态内部类需要一个外部类的对象来实例化,它可以直接访问外部类的非静态成员。这种...
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....
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 面试题 经典 第一,谈谈final, finally, finalize的区别。...第三,Static Nested Class 和 Inner Class的不同,说得越多越好(面试题有的很笼统)。 第四,&和&&的区别。 第五,HashMap和Hashtable的区别。
嵌套类主要分为两大类:静态嵌套类(Static Nested Class)和非静态嵌套类(Non-static Nested Class),后者通常被称为内部类(Inner Class)。 - **静态嵌套类**:此类嵌套类被声明为`static`,因此它们与外部类...
java.lang.NoSuchFieldError: Companion 问题的解决方案
OuterClass.StaticNestedClass nested = new OuterClass.StaticNestedClass(); ``` 总结起来,Inner Class和Static Nested Class的主要区别在于: 1. **依赖性**:Inner Class实例化需要外部类的实例;而Static ...
OuterClass.StaticNestedClass nestedObj = new OuterClass.StaticNestedClass(); ``` ##### 2.2 内部类 - **定义**:未被`static`关键字修饰的类被称为内部类。 - **特点**: - 必须依赖于外部类的实例存在...
16. **Static Nested Class和Inner Class的区别**:静态嵌套类与外部类之间没有隐含引用,而内部类有;内部类可以访问外部类的私有成员,静态嵌套类不行。 17. **assert的使用**:用于断言,测试代码的正确性。 18. ...
Java虚拟机(JVM)是Java应用程序的运行环境,它负责执行字节码并管理内存。在Java程序中,`java.lang.OutOfMemoryError: Java heap space` 是一个常见的错误,意味着程序在运行过程中耗尽了JVM分配的堆内存。这个...