abstract关键字是什么意思
abstract:也就是抽象的意思,与之相反的就是具象,在java中抽象表示类不能实例成对象,方法不能有具体业务的方法体。
学习抽象可以加深我们对于Java多态环境编程的理解,加深对继承这一编程手段的理解。
abstract的用法
在类上
用抽象表示的类的用法是:(public)abstract class 类名{}
在方法上
(public/protected) abstract 返回值类型 方法名(参数列表);
关系
如果一个类中至少有一个抽象方法,那么这个类一定是抽象类,但反之则不然。也就是说一个抽象类中可 以没有抽象方法。这样做的目的是为了此类不能被实例化。
如果一个类继承了一个抽象类,那么它必须全部覆写抽象类中的抽象方法,当然也可以不全部覆写,如果 不覆写全部抽象方法则这个子类也必须是抽象类(这样做就无意义了)
对abstract简单的理解
抽象类不能被实例化
抽象类本身就代表了一个类型,无法 确定为一个具体的对象,所以不能实例化就合乎情理了,只能有它的继承类实例化。
抽象类不能使用final关键字修饰
因为final修饰的类是无法被继承,而对于抽象类来说就是 需要通过继承去实现抽象方法,这又会产生矛盾。
我们没法直接调用抽象方法
必须被子类重载之后才能抽象方法才有具体的业务方法体,
抽象方法不能用private修饰
为抽象方法必须被子类实现(覆写),而private权限对于子类来 说是不能访问的,所以就会产生矛盾
抽象方法也不能用static修饰
试想一下,如果用static修饰了,那么我们可以直接通过类名调 用,而抽象方法压根就没有主体,没有任何业务逻辑,这样就毫无意义了。
对abstract的进一步理解
明明有接口,为什么要有抽象类?
抽象类与接口(interface)有很大的不同之处,接口中不能有实例方法去实现业务逻辑,而抽象类 中可以有实例方法,并实现业务逻辑,比如我们可以在抽象类中创建和销毁一个线程池。
抽象类不能被实例化,为什么要有构造器?
抽象类虽然不能被实例化,但有自己的构造方法,既然它也属于继承的范畴,那么当子类创建对象时必然要优先初始化父类的属性变量和实例方法,不然子类怎么继承和调用呢?而它本身不能实例化,因为它本身就是不确定的一个对象,如果它能被实例化,那么我们通过它的对象来调用它本身的抽象方法是不是有问题。所以不能实例化有在情理之中。因此大家只要记住这个规定就行。
本文深入探讨了Java中的`abstract`关键字,介绍了抽象类不能实例化、抽象方法的定义及使用规则。学习抽象类有助于理解Java的多态和继承。抽象类可以包含实例方法并实现部分业务逻辑,而接口则仅定义方法签名。子类继承抽象类时,必须实现所有抽象方法,否则自身也需要声明为抽象类。理解抽象类与构造器的关系,以及它们在实际编程中的应用场景,对于提升Java编程能力至关重要。
276

被折叠的 条评论
为什么被折叠?



