内部类创建对象的方式
时间: 2024-08-28 16:01:31 浏览: 21
内部类是指位于另一个类的内部,作为成员变量存在的类。它们可以分为静态内部类和非静态(局部)内部类两种。创建内部类的对象有以下两种方式:
1. 静态内部类:可以直接通过外部类的引用,使用`.`操作符来创建实例,因为静态内部类并不依赖于外部类的实例。例如:
```java
OuterClass.StaticInnerClass innerObj = OuterClass.StaticInnerClass.getInstance();
```
2. 非静态(局部)内部类:需要先创建外部类的实例,然后通过这个实例来创建内部类的实例。这种方式通常用于需要访问外部类私有成员的情况。例如:
```java
OuterClass outer = new OuterClass();
OuterClass.InnerInnerClass innerObj = outer.new InnerInnerClass();
```
或者在匿名内部类中直接创建:
```java
outer.new Runnable() {
// ...
};
```
相关问题
内部类对象的创建都有哪些
在Java中,内部类对象的创建方法有以下几种:
1. 静态内部类对象的创建方法: 外部类.内部类 对象名 = new 外部类.内部类();
2. 非静态内部类对象的创建方法: 外部类 外部对象名 = new 外部类(); 外部类.内部类 对象名 = 外部对象名.new 内部类();
3. 匿名内部类对象的创建方法: 外部类 对象名 = new 外部类(){...};
4. 局部内部类对象的创建方法: 在方法内部定义内部类,再通过 new 关键字创建对象。
java匿名内部类创建
Java中可以使用匿名内部类来创建实现某个接口或继承某个类的对象。匿名内部类的语法格式为:new 父类构造器或接口() { 匿名内部类的类体 }。下面是一个例子:
```java
public class AnonymousInnerClassExample {
interface HelloWorld {
void greet();
void greetSomeone(String someone);
}
public void sayHello() {
class EnglishGreeting implements HelloWorld {
String name = "world";
public void greet() {
greetSomeone("world");
}
public void greetSomeone(String someone) {
name = someone;
System.out.println("Hello " + name);
}
}
HelloWorld englishGreeting = new EnglishGreeting();
HelloWorld frenchGreeting = new HelloWorld() {
String name = "tout le monde";
public void greet() {
greetSomeone("tout le monde");
}
public void greetSomeone(String someone) {
name = someone;
System.out.println("Salut " + name);
}
};
HelloWorld spanishGreeting = new HelloWorld() {
String name = "mundo";
public void greet() {
greetSomeone("mundo");
}
public void greetSomeone(String someone) {
name = someone;
System.out.println("Hola, " + name);
}
};
englishGreeting.greet();
frenchGreeting.greetSomeone("Fred");
spanishGreeting.greet();
}
public static void main(String[] args) {
AnonymousInnerClassExample myApp =
new AnonymousInnerClassExample();
myApp.sayHello();
}
}
```
在上面的例子中,我们定义了一个接口HelloWorld,然后使用匿名内部类来实现这个接口。我们创建了三个HelloWorld对象,分别是EnglishGreeting、frenchGreeting和spanishGreeting。其中,EnglishGreeting是一个普通的内部类,而frenchGreeting和spanishGreeting是匿名内部类。我们可以看到,使用匿名内部类可以简化代码,并且不需要单独定义一个类。