抽象方法:表达概念而无法实现具体代码的函数
抽象类:表达概念而无法构造出实体的类,且不能生成对象,通常被继承(extends)
1)抽象方法
1.抽象方法没有方法体 public abstract viud run(); 这就是一个抽象方法
2.抽象方法不能是private的 因为要在继承的子类中实现,你把抽象方法私有化了,子类都没法覆写,那就没意义了
3.抽象方法也不能是static的 具体原因是因为没有方法体 没有实现你怎么给他静态
2) 抽象类
1.抽象类的修饰为 (public) abstract class User{}
2.抽象类无法被实例化, 这个怎么理解呢 抽象类本身就是一个类型,无法具体为一个对象,只能由他的继承类实例化
3.,抽象类有自己的构造器.要被继承的, 子类是依赖于父类的构造器来实例化自己的.
4.抽象类和接口(interface)有很大的不同, 接口中不能有自己的业务逻辑和实现方法,而抽象类可以有自己的业务逻辑和实现方法,比如我们可以在抽象类中实现一个线程池的创建和销毁
5.抽象类不能用final来修饰,因为抽象类是需要被继承来实例化的,但是被final修饰的类是不能被继承的,所有有所矛盾
抽象类和抽象方法的关联
1.一个类中如果有一个抽象方法,那么这个类一定是抽象类, 但是抽象类中一个抽象方法都没有是可以的,这么做可以防止该类被实例化
2.抽象类的子类必须覆写抽象类的所有抽象方法,如果不完全覆写的话,就算继承了也还是一个抽象类,无法被实例(没意义)
为啥要用抽象类
抽象类提取了事物的共性,使得代码易维护,易拓展
抽象类可以在很大程度上在使用方法的覆写来实现多态的属性.