专栏名称: AT阿宝哥
15年IT互联网从业经验,专注产品方案,人才...
目录
相关文章推荐
人人都是产品经理  ·  1100+AI情报1800+报告!这个AI学 ... ·  16 小时前  
三节课  ·  DeepSeek的3大避坑点(小白版) ·  4 天前  
人人都是产品经理  ·  在深圳做「AI 耳机」这一年,我看到的 ... ·  2 天前  
植物星球  ·  这个让人魂牵梦绕的花终于达到盛开阶段 ·  4 天前  
51好读  ›  专栏  ›  AT阿宝哥

《阿宝哥的JavaSE笔记》之14:抽象(Abstract)

AT阿宝哥  · 简书  ·  · 2019-12-26 15:57

正文

Java抽象类

在继承中,抽象是一个非常重要的概念。
类可以是抽象的,方法也可以是抽象的。

建议:从继承开始,一直使用一个例子不断扩展。
抽象类这里,不要只讲语法,而是要引导学生思考为什么有的类需要是抽象类?是因为有的类在实际的业务系统中,没有对应的实例。
千万不要让学员认为抽象类中必须有抽象方法。

目录
抽象类的相关概念

Java中定义抽象类

抽象类的相关概念

如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。
如形状类是抽象的类,圆、三角形等是具体类。

用abstract修饰的类就是抽象类。如果某个类中包含有抽象方法,那么该类就必须定义成抽象类。但是抽象类中不一定有抽象方法。

在面向对象的概念中,知道所有的对象都是通过类来描绘的,但是反过来却不是这样。并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。
比如:如果我们进行一个图形编辑软件的开发,就会发现问题领域存在着圆、 三角形这样一些具体概念,它们是不同的,但是它们又都属于形状这样一个概念,形状这个概念在问题领域是不存在的,它就是一个抽象概念。

抽象类的定义

使用关键字abstract定义抽象类,一般语法:
[访问权限] abstract class 类名 {
成员列表
}

如:
public abstract class Shapes {
public abstract void draw();
}

public abstract class Shapes {
public void draw(){
//具体代码
}
}

要强调,只要一个类不应该有具体对象,就应该是抽象类,不一定是有抽象方法的。

抽象类的相关概念

用abstract修饰的类就是抽象类。如果某个类中包含有抽象方法,那么该类就必须定义成抽象类。
抽象类可以有成员属性和非抽象的成员方法。
抽象类不能被实例化,但可以有构造函数。
抽象类只能用作基类,表示的是一种继承关系。继承抽象类的非抽象类必须实现其中的所有抽象方法,而已实现方法的参数、返回值要和抽象类中的方法一样。否则,该类也必须声明为抽象类。

抽象类的注意事项

抽象类可以有构造方法,但不能直接实例化,只能用来继承;
抽象类的派生子类应该提供对其所有抽象方法的具体实现;如果抽象类的派生子类没有实现其中的所有抽象方法,那么该派生子类仍然是抽象类,只能用于继承,而不能实例化;
抽象类中也可以包含有非抽象的方法,子类中重写非抽象方法时返回值和参数必须与父类一致;
构造方法和静态方法不可以修饰为abstract。

Java抽象方法

有时候,父类中的某一个方法,每一个子类都要去重写。这种情况下,父类中的这个方法,就没有必要有方法体,因为子类都不会直接使用,都要重写。
很多学员会觉得既然这样,那么父类中就不应该声明这个方法。

要强调,软件工程中,往往是要有需求分析,设计,再到编码。在设计阶段,设计人员要想办法让程序员知道某些类中应该实现哪些功能的,也就是what to do。父类往往都是设计人员设计的。因此不能把这样的方法删除掉,如果删除,就没有办法约束子类必须实现这些方法。这种时候,就把父类中的这样的方法的方法体去掉,就成为抽象方法。

抽象方法定义了what to do,而how to do在子类中实现。

目录

抽象方法的相关概念。

Java中的抽象方法。

抽象方法的相关概念

在某些情况下,类无法(或者没有必要)提供方法的具体实现,可以将此方法声明成抽象方法;







请到「今天看啥」查看全文