Java中的引用是灵活的,因为它们允许你在运行时更改对象所引用的内存地址。这意味着你可以使用引用来实现多态、动态绑定和垃圾回收等功能。以下是一些Java引用灵活性的例子:
public interface Animal {
void makeSound();
}
public class Dog implements Animal {
@Override
public void makeSound() {
System.out.println("Woof!");
}
}
public class Cat implements Animal {
@Override
public void makeSound() {
System.out.println("Meow!");
}
}
public class Main {
public static void main(String[] args) {
Animal myAnimal = new Dog(); // 使用Dog类型的引用引用Dog对象
myAnimal.makeSound(); // 输出 "Woof!"
myAnimal = new Cat(); // 使用相同的引用引用Cat对象
myAnimal.makeSound(); // 输出 "Meow!"
}
}
public class Animal {
public void makeSound() {
System.out.println("The animal makes a sound");
}
}
public class Dog extends Animal {
@Override
public void makeSound() {
System.out.println("The dog barks");
}
}
public class Main {
public static void main(String[] args) {
Animal myAnimal = new Dog();
myAnimal.makeSound(); // 输出 "The dog barks"
}
}
public class Main {
public static void main(String[] args) {
Object obj = new byte[1024 * 1024]; // 创建一个1MB的对象
obj = null; // 将引用设置为null,使其不再被引用
System.gc(); // 提示JVM进行垃圾回收
}
}
总之,Java中的引用非常灵活,它们允许你实现多态、动态绑定和垃圾回收等功能。这些特性使得Java成为一种强大的面向对象编程语言。