1.我们一般是用子类来创建对象,那么我们希不希望拿父类来创建对象?不希望,因为父类的范围太大,不够具体
    父类是一个基类、超(super)类,是别的类所继承的,但如果正常定义类,不可避免的可以被用来创建实例

    2.abstract:如何禁止被拿去创建实例?
    abstract 开头的是抽象类:和别的类区别不大,只是不能用来创建对象,是专门用来被继承的类
    image.png//如果new Animal()是会报错的

    3.抽象方法:抽象类可以添加抽象方法
    e.g. Animal里面的sayHello()方法一般没有用,因为animal类是拿来继承的,sayHello实际上就是动物叫,而不同的动物叫声不一样,所以sayHello()相当于一个通用叫声的方法,不能满足每个子类的需求,而且有时候还会在子类当中忘记重写,这时候就会默认用到默认方法(动物叫)
    所以这时候希望这个方法不在类中定义具体实现,把结构定义出来就行,具体实现让子类来编写
    因此在方法名字前面添加 abstract,没有方法体,只能定义在抽象类中,子类必须对抽象方法重写
    image.png
    如果新定义一个子类,里面啥都没有就会报错,提醒你给父类中的抽象方法进行重写
    image.png