这种情况搞不懂,创建对象成功了,是只要把抽象方法给具现化了就能创建吗?
abstract class Driver {
public abstract void drive();
}
public class Test {
public static void main(String[] args) {
Driver d = new Driver() {
@Override
public void drive() {
System.out.println("drive");
}
};
d.drive();
Driver d2 = new Driver() {
@Override
public void drive() {
System.out.println("don't drive");
}
};
d2.drive();
}
}
抽象类和接口都能创建对象,只是后边的new不能是new他们自己,但可以new他们的实现类(必须是类,不能是抽象类和接口),
人们使用抽象类和接口只是为了说明要干什么事,而让他们的实现类去根据自己的需要去实现这些方法,比如说抽象类定义一个eat()方法,
它并没有说这个方法具体怎么做,羊就可以吃草,虎就可以吃肉,羊和虎都实现了这个吃的方法。
这不就是匿名内部类吗,比如你这个类只是用一次就不需要单独生成一个类。而是直接使用匿名内部类,就会直接new出一个对象。java8中还有lambda表达式更简单。比如:
interface Driver {
void drive();
}
public class Test {
public static void test(Driver driver){
driver.drive();
}
public static void main(String[] args) {
test(()->{
System.out.println("aaa");
});
}
}
抽象类不能直接通过new实例化,但可以有自己的构造方法,也可以通过子类继承,实例化子类的时候抽象类也会被实例化。例子其实是在抽象类内部实例化而已。
抽象类不能被实例化,你的这种写法是因为有匿名内部类继承了抽象类,实际上抽象类并没有实例化.