Dog(); // Dog对象赋值给Speakable引用
复制代码
|
// 调用抽象类和接口中定义的方法 |
|
animal.makeSound(); // 输出 "The dog barks." |
|
speakable.speak(); // 输出 "The dog says, 'Woof!'" |
|
} |
}
复制代码
|
**Java类和对象实例(七):内部类** |
|
|
|
内部类(Inner Class)是定义在另一个类内部的类。内部类可以访问外部类的私有成员,这是它们的主要优势之一。内部类可以分为四种类型:静态内部类、实例内部类、局部内部类和匿名内部类。 |
|
|
|
**静态内部类(Static Inner Class)** |
|
|
|
静态内部类不需要外部类对象即可创建实例,它们只能访问外部类的静态成员。 |
|
|
|
```java |
|
public class OuterClass { |
|
static int outerVariable = 100; |
|
|
|
// 静态内部类 |
|
static class StaticInnerClass { |
|
void display() { |
|
System.out.println("This is a static inner class."); |
|
System.out.println("outerVariable = " + outerVariable); |
|
} |
|
} |
|
|
|
public static void main(String[] args) { |
|
// 创建静态内部类的实例,不需要外部类对象 |
|
StaticInnerClass innerObject = new StaticInnerClass(); |
|
innerObject.display(); |
|
} |
|
} |
实例内部类(Instance Inner Class)
实例内部类需要外部类对象才能创建实例,它们可以访问外部类的所有成员(包括私有成员)。
java复制代码
|
public class OuterClass { |
|
private int outerVariable = 100; |
|
|
|
// 实例内部类 |
|
class InstanceInnerClass { |
|
void display() { |
|
System.out.println("This is an instance inner class."); |
|
System.out.println("outerVariable = " + outerVariable); |
|
} |
|
} |
|
|
|
public void show() { |
|
// 创建实例内部类的实例,需要外部类对象 |
|
InstanceInnerClass innerObject = new InstanceInnerClass(); |
|
innerObject.display(); |
|
} |
|
|
|
public static void main(String[] args) { |
|
OuterClass outerObject = new OuterClass(); |
|
outerObject.show(); |
|
} |
|
} |
局部内部类(Local Inner Class)
局部内部类是在方法内部定义的类,它们只能访问定义它们的方法的final变量。
java复制代码
|
public class OuterClass { |
|
public void someMethod() { |
|
final int x = 10; |
|
|
|
// 局部内部类 |
|
class LocalInnerClass { |
|
void display() { |
|
System.out.println("This is a local inner class."); |
|
System.out.println("x = " + x); |
|
} |
|
} |
|
|
|
// 创建局部内部类的实例 |
|
LocalInnerClass innerObject = new LocalInnerClass(); |
|
innerObject.display(); |
|
} |
|
|
|
public static void main(String[] args) { |
|
OuterClass outerObject = new OuterClass(); |
|
outerObject.someMethod(); |
|
} |
|
} |
匿名内部类(Anonymous Inner Class)
匿名内部类是没有名字的内部类,它们通常用于实现接口或扩展类,并且只使用一次。
java复制代码
|
public class OuterClass { |
|
interface MyInterface { |
|
void doSomething(); |
|
} |
|
|
|
public void useInterface() { |
|
// 创建匿名内部类实例 |
|
MyInterface myObj = new MyInterface() { |
|
@Override |
|
public void doSomething() { |
|
System.out.println("Doing something anonymously."); |
|
} |
|
}; |
|
|
|
// 调用接口方法 |
|
myObj.doSomething(); |
|
} |
|
|
|
public static void main(String[] args) { |
|
OuterClass outerObject = new OuterClass(); |
|
outerObject.useInterface(); |
|
} |
|
} |
这些示例涵盖了Java中类和对象的基本概念,包括封装、继承、多态、抽象、接口和内部类。通过理解这些概念,你可以更好地组织你的代码,并编写出更可维护和可扩展的程序。