1.内部类与外部类之间的交互
内部类与外部类之间可以相互访问对方的私有成员,这为程序设计提供了更大的灵活性和可扩展性
public class Outer { private int outerVar; public Outer(int outerVar) { this.outerVar = outerVar; } public void outerMethod() { System.out.println("Outer method"); } public class Inner { private int innerVar; public Inner(int innerVar) { this.innerVar = innerVar; } public void innerMethod() { System.out.println("Inner method"); System.out.println("Outer variable: " + outerVar); // 访问外部类的私有成员 outerMethod(); // 调用外部类的方法 } } } public class Main { public static void main(String[] args) { Outer outer = new Outer(10); Outer.Inner inner = outer.new Inner(5); inner.innerMethod(); } }
2.内部类的设计模式
内部类在设计模式中经常用于实现以下几种模式:
- 迭代器模式:内部类可以实现一个迭代器,遍历外部类的集合元素。
- 工厂模式:内部类可以实现一个工厂,用于创建外部类的实例。
- 观察者模式:内部类可以作为观察者,监听外部类的状态变化。
- 单例模式:通过私有构造方法和内部类实现线程安全的单例模式。
// 迭代器模式 public class MyCollection { private List<String> list; public MyCollection() { list = new ArrayList<>(); } public void add(String element) { list.add(element); } public Iterator<String> getIterator() { return new MyIterator(); } private class MyIterator implements Iterator<String> { private int index; @Override public boolean hasNext() { return index < list.size(); } @Override public String next() { return list.get(index++); } } } // 工厂模式 public class AnimalFactory { public Animal createAnimal(String type) { if ("dog".equalsIgnoreCase(type)) { return new Dog(); } else if ("cat".equalsIgnoreCase(type)) { return new Cat(); } else { throw new IllegalArgumentException("Invalid animal type: " + type); } } private class Dog implements Animal { @Override public void makeSound() { System.out.println("Dog barks"); } } private class Cat implements Animal { @Override public void makeSound() { System.out.println("Cat meows"); } } } // 观察者模式 public interface Observer { void update(String message); } public class Subject { private List<Observer> observers; public Subject() { observers = new ArrayList<>(); } public void addObserver(Observer observer) { observers.add(observer); } public void removeObserver(Observer observer) { observers.remove(observer); } public void notifyObservers(String message) { for (Observer observer : observers) { observer.update(message); } } } // 单例模式 public class Singleton { private Singleton() { } public static Singleton getInstance() { return Holder.INSTANCE; } private static class Holder { private static final Singleton INSTANCE = new Singleton(); } }
总结
内部类的高级应用为Java程序设计提供了更多的设计模式和交互方式,使代码更加灵活、模块化,并且更好地实现了面向对象编程的原则。通过熟练运用内部类,可以使代码更加优雅和易于维护,提高开发效率和代码质量。