上一篇:比较无处不在-灵活覆写equals方法 | 带你学《Java面向对象编程》之五十一
【本节目标】
通过阅读本节内容,你将了解到抽象类的相关知识,并能够编写简单的抽象类,遵循继承抽象类的规则实现抽象类中的抽象方法。
类继承的主要作用在于可以扩充已有类的功能,但是对于之前的继承操作而言会发现,子类可以由自己的选择任意来决定是否要覆写某一个方法,这个时候父类无法对子类做出强制性的约定(强制性子类必须覆写某些方法),这种情况下往往不会采用类的继承(在实际的开发之中很少会出现继承一个已经完善的类,可以直接使用的类),而是必须要继承抽象类。在以后进行父类(SuperClass)设计的时候,优先考虑的一定是抽象类。
抽象类基本概念
抽象类的主要作用在于对子类中覆写方法进行约定,在抽象类里面可以去定义一些抽象方法以实现这样的约定。抽象方法指的是使用了abstract关键字定义的并且没有提供方法体的方法,而抽象方法所在的类必须为抽象类,抽象类必须使用abstract关键字来定义(在普通类的基础上追加抽象方法就是抽象类)。
范例:定义一个抽象类
abstract class Message { //定义抽象类
private String type ; //消息类型
public abstract String getConnectInfo() ; //抽象方法
public void setType(String type) { //普通方法
this.type = type ;
}
public String getType() { //普通方法
return this.type ;
}
}
public class JavaDemo {
public static void main(String args[]) {
}
}
当一个抽象类完成之后(切记:“抽象类不是完整的类”),如果要想去使用抽象类,则必须按照如下原则去进行:
- 抽象类必须提供有子类,子类使用extends继承一个抽象类;
- 抽象类的子类(不是抽象类)一定要覆写抽象类中的全部抽象方法;
- 抽象类的对象实例化可以利用对象多态性通过子类向上转型的方式完成。
范例:使用抽象类
abstract class Message { //定义抽象类
private String type ; //消息类型
public abstract String getConnectInfo() ; //抽象方法
public void setType(String type) { //普通方法
this.type = type ;
}
public String getType() { //普通方法
return this.type ;
}
}
class DatabaseMessage extends Message { //类的继承关系
public String getConnectInfo() { //方法覆写
return “Oracle数据库连接信息。”
}
}
public class JavaDemo {
public static void main(String args[]) {
Message msg = new DatabaseMessage () ;
msg.setType(“客户消息”) ;
System.out.println(msg.getConnectInfo()) ;
System.out.println(msg.getType ()) ;
}
}
执行结果:
Oracle数据库连接信息。
客户消息
从整体上来讲,抽象类只是比普通类增加了抽象方法以及对子类的强制性覆写要求而已,其它的使用过程和传统的类继承是完全相同的。
对于抽象类使用的几点意见:
- 抽象类使用很大程度上有一个核心的问题:抽象类自己无法直接实例化;
- 抽象类之中主要的目的是进行过度操作使用,所以当要使用抽象类进行开发的时候,往往都是在设计中需要解决类继承问题是所带来的的代码重复处理。
想学习更多的Java的课程吗?从小白到大神,从入门到精通,更多精彩不容错过!免费为您提供更多的学习资源。
本内容视频来源于阿里云大学