抽象类可以创建对象吗?

这种情况搞不懂,创建对象成功了,是只要把抽象方法给具现化了就能创建吗?

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实例化,但可以有自己的构造方法,也可以通过子类继承,实例化子类的时候抽象类也会被实例化。例子其实是在抽象类内部实例化而已。

抽象类不能被实例化,你的这种写法是因为有匿名内部类继承了抽象类,实际上抽象类并没有实例化.