抽象类

来源:互联网 发布:mac玩qq堂 编辑:程序博客网 时间:2024/05/22 13:43

一、为什么要使用抽象类?

比如:三角形、矩形、圆形

方法:求三角形、矩形、圆形的周长 面积 以及简单的各自介绍

原因1:矩形、三角形、圆形(都有以上4个相同的方法),当多个类中有相同的属性和方法时,应该把这些属性和方法提取出来,放到一个父类中(Graph 图形类),其他类(矩形、三角形、圆形)继承继承类,来复用图形类的代码..这是我们以前学过的继承..但是我们发现 当求周长、求面积、说出我有几条边这几个方法 抽到图形类时,图形类,无法准确实现这3个方法或者说实现起来没有意义,这样需要把这三个方法定义成抽象方法...(没有方法体的方法 或没有实现的方法)..一个类中一旦有一个方法定义成抽象的,这个类一定要是抽象类...

原因2:当子类中 对父类继承下来的方法(求周长) 有各自不同的实现的时候,需要使用抽象类

二、抽象类定义

含有抽象方法的类叫做抽象类

抽象方法:没有方法体的方法叫做抽象方法

eg:public abstaract int getLength();

三、如何定义一个抽象类?

public abstract class Animal {public  abstract void say();}

四、关于抽象的若干知识点

有抽象方法的类只能定义成抽象类
抽象类不能实例化 不能用new来实例化抽象类
抽象类可以包含属性、方法、构造函数、 但是构造方法不能用来new实例,只能被子类调用
抽象类只能用来继承
抽象方法必须被子类实现

五、关于抽象类的问题

1. 抽象方法能使用private来修饰吗?

不可以. 因为抽象方法 是需要子类去继承然后重写它,而private修饰的方法不能被继承 二者矛盾

 2. 抽象类可以没有抽象方法吗???

抽象类可以不包含抽象方法的, 我就是认为这个类是软件设计中的半成品 所以把它定义成抽象类

3. 抽象方法可以定义成静态的吗???

不可以. 因为静态方法 是使用类名调用的  类名.方法名()  调用该方法 并没有做任何事  没有意义

所以抽象方法不能定义成静态的...

4. 抽象方法可以使用final 修饰吗??

不能. final 最终方法 不能被重写 而抽象方法 是需要子类去重写,二者矛盾

5. 抽象类可以使用 final 修饰吗??

不能. final 修饰的类 是最终类 不能被继承 ,而抽象类 需要子类去继承的...二者矛盾

 

 

 

原创粉丝点击