abstract 抽象方法、类

简介: 1.抽象方法 仅仅是声明,并不给出定义的方法叫抽象方法。形如 abstract void fun(); 2.抽象类 cpp中,包含纯虚函数的类叫抽象类。它没有"抽象"对应的关键字。 如果一个类中有抽象方法,该类必须为抽象类。 如果一个类没中有抽象方法,该类也可以为抽象类。考虑这种情况:有一个类,让其包含任何抽象方法都显得没有实际意义,而且我们也想要阻止产生这个类的任何对象,那么这

1.抽象方法

仅仅是声明,并不给出定义的方法叫抽象方法。形如 abstract void fun();

2.抽象类

cpp中,包含纯虚函数的类叫抽象类。它没有"抽象"对应的关键字。

如果一个类中有抽象方法,该类必须为抽象类

如果一个类没中有抽象方法,该类也可以为抽象类。考虑这种情况:有一个类,让其包含任何抽象方法都显得没有实际意义,而且我们也想要阻止产生这个类的任何对象,那么这样做就很有用了。

抽象类不允许实例化。
一个类继承一个抽象类,有两种情况:
1.为所有抽象方法写出定义。

2.没有为所有抽象方法写出定义。此时子类也是抽象类,必须加上abstract关键字。


3.与接口的对比

语法对比:
抽象类:不能多继承;既有抽象的方法也有给出实现的方法。
接口:可以多继承;只能声明方法,不能实现方法(java 8中可以给出默认实现)。字段只能是 final static类型。

适用场景对比:
抽象类:一般用作基类。多个子类间既有相同的行为也有不同的行为。相同的行为可在抽象类中作为普通方法实现,不同的行为可在抽象类中定义为抽象方法。
接口:多个类族都能用到的公用方法可以在这里声明。java类库中的 Comparable , Cloneable 都是接口。

结合接口与抽象类的各自特征,就有了   默认适配器模式

4.抽象类中的this

访问字段时找的是抽象类,因为字段不能@Override。
访问方法时分情况讨论,若没有被重写,访问的是抽象类的方法,若被重写,访问的是子类的方法。
所以看下例子:
调试时可以清晰地看到子类继承了抽象类的字段。

图4-1  子类会继承父类的私有字段



目录
相关文章
|
6月前
|
程序员 C#
C#抽象类和抽象方法详解
C#抽象类和抽象方法详解
58 0
|
6月前
|
存储
抽象类为什么有抽象方法?
抽象类为什么有抽象方法?
|
Java
Java面向对象 抽象类与抽象方法的使用(关键字abstract)
Java面向对象 抽象类与抽象方法的使用(关键字abstract)
73 0
|
程序员 PHP 开发者
抽象类 Abstract|学习笔记
快速学习抽象类 Abstract
抽象类 Abstract|学习笔记
|
Java
Java面向对象(19)--抽象类与抽象方法abstract
Java面向对象(19)--抽象类与抽象方法abstract
106 0
|
Java
接口是否可继承接口?抽象类是否可实现(implements)接口?抽象类是否可继承具体类?抽象类中是否可以有静态的main方法?
有一个面试四连击的题目:接口是否可继承接口?抽象类是否可实现(implements)接口?抽象类是否可继承具体类?抽象类中是否可以有静态的main方法?
158 0
接口是否可继承接口?抽象类是否可实现(implements)接口?抽象类是否可继承具体类?抽象类中是否可以有静态的main方法?
|
Java 程序员
每天一个知识点(六)抽象类必须要有抽象方法吗?抽象类能使用 final 修饰吗?
抽象类必须要有抽象方法吗?抽象类能使用 final 修饰吗?
|
程序员 C# 索引
知识回顾:抽象类与抽象方法
知识回顾:抽象类与抽象方法
109 0
接口是否可继承(extends)接口?抽象类是否可实现(implements)接口?抽象类是否可继承具体类(concrete class)?
接口可以继承接口,而且支持多重继承。抽象类可以实现(implements)接口,抽象类可继承具体类也可以继承抽象类。
1943 0