假设你有一个abstract class...
abstract class Vehicle {
abstract public void move();
}
无需创建class Car extends Vehicle 或class Boat extends Vehicle,您就可以借助匿名类的魔力做到这一点。 (这可能是 javadoc 没有说有子类的原因,因为它是匿名的,因此不能被 javadoc 所代表的公共 api 引用。)
class Example {
public Vehicle foo() {
Vehicle car = new Vehicle {
@Override
public void move() {
// do some car movement, i.e. driving
}
}
return car;
}
public Vehicle bar() {
Vehicle boat = new Vehicle {
@Override
public void move() {
// do some boat movement, i.e. boating
}
}
return boat;
}
}
所以不你不能实例化abstract class...但这并不是全部事实,你可以将它作为一个匿名类并在现场实现方法。虽然从技术上讲,这并不是实例化 abstract class,但当你看到这种事情时,它会做很多事情。
再说一遍,假设你有一个abstract class...
abstract class Vehicle {
abstract public void move();
}
如果内部class 是private,那么只有封装它的类才能实例化它。 (这可能是 javadoc 没有说有子类的原因,因为它是私有的,因此对 javadoc 所代表的公共 api 隐藏。)
class Example {
private class Car extends Vehicle {
@Override
public void move() {
// do some car movement, i.e. driving
}
}
private class Boat extends Vehicle {
@Override
public void move() {
// do some boat movement, i.e. boating
}
}
public Vehicle foo() {
return new Car();
}
public Vehicle bar() {
return new Boat();
}
}
这并不能解释关于实例化abstract classes 的任何内容,但它可能有助于回答有关URL、openConnection 和URLConnection 的问题。