抽象类(核心)

来源:互联网 发布:qq三国hj和js 编辑:程序博客网 时间:2024/05/16 10:01

在以后的的开发中,一个类不要继承一个已经实现好的类,只能继承抽象类或实现接口;

一、抽象类基本概念

之前所学的都输于普通类,普通类的特征是:类的结构很完整,而且可以直接产生实例化并使用。在普通类之中所定义的方法都是具备方法体的{ }”,但若现在一个类中的某些方法希望强制子类进行覆写,则可以将其定义为抽象方法,抽象方法使用abstract”关键字声明,而且声明时没有方法体,而包含抽象方法的类就被称为抽象类,抽象类也要使用abstract关键字定义;

范例1:定义抽象类

 

抽象类定义完后并不能像普通类那样直接使用关键字new进行对象实例化操作(但是可以声明抽象类对象)

 

因为一旦一个类的实例化对象产生了,就意味着可以通过此对象调用类中的方法,可是抽象方法没有方法体,所以无法调用。

1. 抽象类使用原则:

1)抽象类一定要被子类所继承;

2)抽象类的子类(如果不是抽象类)则必须覆写抽象类中全部的抽象方法(强制覆写)

3)抽象类可以通过子类对象的向上转型实现类对象实例化操作;

范例2

 

 

 

可以发现抽象类就是比普通类多了抽象方法的定义,但是在进行继承关系操作的时,可发现比普通类具备更强的制约性,即:抽象类的子类必须有明确的方法覆写要求,普通类没有

2. 抽象类注意事项

1)抽象类在定义时不可使用final关键字,因为抽象类必须有子类;

2)抽象类中可以定义构造方法,因为抽象类只是比普通类多了抽象方法而已,其他的    结构(属性、全局常量、普通方法)全存在,既然存在属性了一定会存在构造方法

3)抽象类可以没有抽象方法,此时依然无法直接产生抽象类的实例化对象。

4)抽象类是否可以使用static定义

     *若定义的是一个普通的外部类,无法使用static来定义抽象类

 *若定义的是一个内部类,那么就可以使用static;因为使用static定义的内部类就成   为了一个外部类;

5)一个抽象类可以在此抽象类的内部提供实现此抽象类的子类;

范例3解释第4

 

 

 

范例4:解释第5条在内部实现本类对象的操作形式

 

此时A类是无法进行对象实例化的,但是只有static方法可以不受类实例化对象的控制;

应添加为:

 

 

一般而言使用此类代码只有一个目的:不希望用户关注到此类的存在;

二、抽象类应用——模板设计

抽象类不是一个具体类,只是一个半成品,而子类负责实现这些未实现的功能;

实例5

需求有三个按钮,每按一个按钮表示一种操作,现在提供三种操作吃饭、睡觉、工作,现在又有三类事物:

=吃饭、睡觉

机器人=吃饭、工作

=吃饭、睡觉、工作

 

代码实现:

1. 定义抽象类

 

 

如果要想让三个不同的事物可以通过commond()进行操作,那么就必须继承Action类,同时根据需要覆写方法

2. 定义子类Personpigrobot类,继承抽象类并覆写抽象类的全部抽象方法

 

 

 

3. 测试代码

 

如果要想正常的进行操作,就必须按照抽象类提供的要求实现,也就是说此时的抽象类提供给我们的一个操作模板;根据模板实现子类的定义。在学习servlet技术时在继续学习设计模式。

项目中可以没有抽象类,但是必须有借口;

0 0