今天看了一下内部类,发现匿名内部类貌似是一个很高深的玩意,他在初始化的时候竟然又定义了一个无名的内部类去继承这个实现类或者说是接口,可谓java实现多态性
的一个非常漂亮的方法,下面请看实例代码
package com.bird.thinking;
/**
*
* @author Bird
* @category 匿名内部类实现工厂化生产
*/
interface Service{//需要生产的接口
void method1();
void method2();
}
interface ServiceFactory{//工厂生产接口
Service getService();
}
class Implementation1 implements Service{
private Implementation1(){}//构造器私有,禁止new
public void method1(){
System.out.println("Implementation1 method1");
}
public void method2(){
System.out.println("Implementation1 method2");
}
public static ServiceFactory factory= //使用匿名内部类实现ServiceFactory接口,将当前类初始化
new ServiceFactory(){
public Service getService(){
return new Implementation1();
}
};
}
class Implementation2 implements Service{//类似
private Implementation2(){}
public void method1(){
System.out.println("Implementation2 method1");
}
public void method2(){
System.out.println("Implementation2 method2");
}
public static ServiceFactory factory =
new ServiceFactory(){
public Service getService(){
return new Implementation2();
}
};
}
public class Factories {
public static void serviceConsumer(ServiceFactory fact){
Service s = fact.getService();
s.method1();
s.method2();
}
public static void main(String[] args){
serviceConsumer(Implementation1.factory);//类是类的多态性
serviceConsumer(Implementation2.factory);
}
}
运行结果
Implementation1 method1
Implementation1 method2
Implementation2 method1
Implementation2 method2
这个包里面有三个类,其实应该是五个类,因为有两个匿名内部类,他通过接口ServiceFactory实现工厂化生产,配上类继承的多态性,可以说变的太美妙的,解释在代码里面都有,还是仔细去体会代码吧。经典啊!!!
分享到:
相关推荐
当这个工厂方法使用匿名内部类来实现时,代码可以更加灵活和模块化。 首先,让我们看一个简单的工厂方法示例,使用传统的工厂模式: ```java public interface Creator { void createProduct(); } public class ...
在Java编程语言中,匿名内部类是一种特殊的类,它没有名称,通常用于简洁地实现某个接口或继承某个类,尤其在只需要单个实例且无需多次复用的情况下。这种设计模式可以大大简化代码,提高可读性。下面我们将深入探讨...
然而,当涉及到匿名内部类时,它们通常不是为了创建整个工厂,而是用于快速实现特定的接口或继承自特定的类。匿名内部类可以立即实例化,并且可以直接访问其外部类的成员(包括私有成员),这是其独特之处。在...
匿名内部类可以继承一个类或实现一个接口,并且可以在声明的同时直接实例化。它们常用于简化代码,尤其是在事件处理和回调机制中。 3. **局部内部类**:局部内部类定义在方法、构造器或代码块内部,它的作用域仅...
在java中,匿名内部类可以用来实现抽象类和接口。例如,在上面的实例中,我们可以使用匿名内部类来实现抽象类Person的eat方法。这种方式可以简化代码编写,并且可以提高代码的可读性和维护性。 匿名内部类也可以...
- 匿名内部类:没有名称的内部类,通常用于实现接口或抽象类的快速定义,常见于事件处理和回调机制中。 3. 使用方法 - 成员内部类的使用: - 外部类的非静态方法可以通过创建内部类的实例来访问成员内部类的方法...
4. 匿名内部类:没有名字的内部类,用于实现接口或抽象类。 成员内部类的特点: * 可以使用外部类的所有成员变量和成员方法,包括private的成员变量和成员方法。 * 可以使用private修饰符来限制访问。 * 可以使用...
内部类分为四种类型:成员内部类、局部内部类、匿名内部类和静态内部类。成员内部类就像普通的类成员,可以有自己的访问修饰符;局部内部类只存在于方法或块的范围内;匿名内部类通常用于快速创建一个简单的类实例,...
此外,我们还需要理解事件监听机制,用匿名内部类或接口实现ActionListener,以便处理按钮点击和其他用户交互。 对于云工厂中的数据展示,JLabel和JTextComponent可以用来显示静态和动态信息,而JTable则适用于展示...
10. **内部类**:Java支持类内类,包括成员内部类、局部内部类、匿名内部类和静态内部类,用于实现复杂的设计和封装。 11. **设计模式**:在Java中,设计模式是解决常见问题的最佳实践,例如工厂模式、单例模式、...
- 匿名内部类没有名称,通常用于简化代码,尤其是实现接口或继承类时。 - 创建对象:直接在需要创建对象的地方定义匿名内部类,并在定义的同时创建对象。 - 应用场景:快速创建一个只使用一次的简单类或接口实现...
- 匿名内部类适合实现简单的接口或抽象类,并且仅需用一次的情况。 - 保持类的粒度小,避免过度复杂的设计。 - 在设计时,考虑类的职责和依赖关系,以遵循单一职责原则和依赖倒置原则。 8. **设计模式中的应用**...
此外,Java还提供了匿名内部类,工厂方法,单例模式等多种实例化方式。匿名内部类允许我们在没有类名的情况下创建对象,通常用于回调和事件处理。工厂方法是一种设计模式,它提供了一种创建对象的抽象,允许子类改变...
内部类分为四种类型:成员内部类、局部内部类、匿名内部类和静态内部类。这些案例可能会展示它们各自的用途和用法。 - 成员内部类可以直接访问外部类的所有成员,包括私有成员,这在设计模式中常用于表示组件间的...
- **匿名内部类**:没有名字的内部类,通常用于实现接口或抽象类的快速简洁实现。 - **静态内部类**:可以独立于外部类实例存在,但仍然能访问外部类的静态成员。 在选择题中,可能询问哪些内部类声明是有效的。...
- **事件监听器**:可能通过匿名内部类实现,监听键盘输入或其他用户交互,触发相应操作。 5. **用户界面设计**: - **Swing或JavaFX**:Java提供的图形用户界面库,用于构建聊天窗口,包括文本框、按钮等组件。 ...
9. 内部类:Java支持嵌套类,包括成员内部类、局部内部类、静态内部类和匿名内部类。了解它们各自的用法和特点。 10. 泛型:泛型提供了一种在编译时检查类型安全的方法,避免了强制类型转换,提高了代码的可读性和...
通过实现ActionListener接口或者使用匿名内部类,你可以定义当用户执行特定操作时程序的行为。 4. **线程编程**:即时通讯软件通常需要同时处理多个任务,例如接收消息和发送消息可能需要在不同的线程中进行。Java...
Java中可以使用接口和匿名内部类实现命令模式。 16. 解释器模式:定义了一个表达式接口,使得该接口可以解释不同语法规则。在Java中,可以使用抽象语法树(AST)实现解释器模式。 17. 迭代器模式:提供一种方法...
9. 内部类:Java支持在类内部定义其他类,包括成员内部类、局部内部类、匿名内部类等,这有助于实现更复杂的逻辑和设计模式。 10. 异常处理:Java通过try-catch-finally语句块进行异常处理,提供了一种优雅的方式来...