黑马程序员_抽象类

----------- android培训java培训、java学习型技术博客、期待与您交流! ------------

抽象类

抽象类是指使用 abstract 关键字修饰的类,也就是在声明一个类时加入了 abstract 关键字。抽象类是一种特殊的类,其它未使用 abstract 关键字修饰的类一般称作实体类。例如:

public abstract class A{

public A(){}

}

抽象方法是指使用 abstract 关键字修饰的方法。抽象方法是一种特殊的方法,其它未使用 abstract 关键字修饰的方法一般称作实体方法。

如:

public abstract void test();

1抽象类和实体类相比,主要有以下两点不同:

(1) 抽象类不能使用自身的构造方法创建对象(语法不允许)

例如下面的语法是错误的:

A a = new A();

但是抽象类可以声明对象,例如下面的代码是正确的:

A a;

A a1,a2;

只是声明出的对象默认都是 null 的,无法调用其内部的非静态属性和非静态方法。

说明:抽象类可以使用子类的构造方法创建对象。

(2) 抽象类内部可以包含任意个(0 个、1 个或多个)抽象方法

抽象类内部可以包含抽象方法,也可以不包含抽象方法,对于包含的个数没有限制。而实体类内部不能包含抽象方法。

在抽象类内部,可以和实体类一样,包含构造方法、属性和实体方法,这点和一

般的类一样。

2 抽象方法和实体方法相比,主要有以下几点不同:

(1) 抽象方法没有方法体

也就是说在声明抽象方法时,不能书写方法体的{},而只能以分号结束方法。下面是实体方

法和抽象方法声明的比较:

抽象方法声明:

public abstract void test(int a);

实体方法声明:

public void test(int a){

方法体

}

(2) 抽象方法所在的类必须为抽象类

也就是说,如果抽象方法声明在一个类内部,则该类必须为抽象类。(说明:抽象方法也可

以出现在接口内部)。这样,在继承时,如果继承的类是抽象类,而该抽象类中还包含抽象方法时,则该子类必须声明成抽象类,否则将出现语法错误。如果子类需要做成实体类的话,则必须覆盖继承的所有抽象方法。这个是抽象类最核心的语法功能——强制子类覆盖某些方法。

3抽象类的用途主要有两个:

(1) 严禁直接创建该类的对象

如果一个类内部包含的所有方法都是 static 方法,那么为了避免其它程序员误用,则可以将该类声明为 abstract,这样其它程序员只能使用类名.方法名调用对应方法,而不能使用对象名.方法名进行调用。这样的类例如 API 中的 Math

(2) 强制子类覆盖抽象方法

这样可以使所有的子类在方法声明上保持一致,在逻辑上也必须将方法的功能保持一致。

这是抽象类最主要的用途。通过让存在继承关系的类中功能一样(但是内部实现规则不同)的方法声明成一样的,方便多态的使用。

----------- android培训java培训、java学习型技术博客、期待与您交流! ------------

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值