面向对象程序设计-Java语言.ppt
抽象类是它的所有子类公共属性的集合,是包含一个或多个抽象方法的类。使用抽象类的一大优点就是可以充分利用这些公共属性来提高开发和维护程序的效率。对于抽象类与抽象方法的限制如下:(1)凡是用abstract修饰符修饰的类被称为抽象类。凡是用abstract修饰符修饰的成员方法被称为抽象方法。第30页,共72页,星期日,2025年,2月5日(2)抽象类中可以有零个或多个抽象方法,也可以包含非抽象方法。(3)抽象类中可以没有抽象方法,但是,有抽象方法的类必须是抽象类。(4)对于抽象方法来说,在抽象类中只指定其方法名及其类型,而不书写其实现代码。(5)抽象类可以派生子类,在抽象类派生的非抽象子类中必须实现抽象类中定义的所有抽象方法。第31页,共72页,星期日,2025年,2月5日(6)抽象类不能创建对象,创建对象的工作由抽象类派生的非抽象子类来实现。(7)如果父类中已有同名的abstract方法,则子类中就不能再有同名的抽象方法。(8)abstract不能与final并列修饰同一个类。(9)abstract不能与private、static、final或native并列修饰同一个方法。(10)abstract类中不能有private的数据成员或成员方法。第32页,共72页,星期日,2025年,2月5日【例5.9】抽象类应用。注意:在上例中,只能在C5_9类中main方法中定义3个子类的对象,使它们称为main方法的局部对象,而不能将它们定义在main方法之外,因为非static方法是不能在static方法中被引用的,而方法中的局部变量不能带修饰符,它们不受此限制。第33页,共72页,星期日,2025年,2月5日接口多重继承是指一个子类可以有多个直接父类,该子类可以全部或部分继承所有直接父类的数据成员及成员方法。在面向对象的程序设计语言中,有些语言(如C++)提供了多继承机制。而Java出于安全性、简化程序结构的考虑,不支持类间的多继承而只支持单继承。第34页,共72页,星期日,2025年,2月5日然而在解决实际问题的过程中,在很多情况下仅仅依靠单继承不能将复杂的问题描述清楚。为了Java程序的类间层次结构更加合理,更符合实际问题的本质要求,Java语言提供接口来实现多重继承机制。第35页,共72页,星期日,2025年,2月5日1.声明接口,格式如下:[修饰符]interface接口名[extends父接口名列表]{常量数据成员声明抽象方法声明}常量数据成员前可以有也可没有修饰符,其默认的修饰符是publicfinalstatic。第36页,共72页,星期日,2025年,2月5日接口中方法默认的修饰符为publicabstract。从上面的格式可以看出,定义接口与定义类非常相似。实际上完全可以把接口理解成为一种特殊的类,接口是由常量和抽象方法组成的特殊类。一个类只能有一个父类,但是它可以同时实现若干个接口。第37页,共72页,星期日,2025年,2月5日这种情况下,如果把接口理解成特殊的类,那么这个类利用接口实际上就获得了多个父类,即实现了多重继承。接口定义仅仅是实现某一特定功能的一组功能的对外接口和规范,而不能真正地实现这个功能,第38页,共72页,星期日,2025年,2月5日这个功能的真正实现是在“继承”这个接口的各个类中完成的,要由这些类来具体定义接口中各抽象方法的方法体。因而在Java中,通常把对接口功能的“继承”称为“实现”。2.定义接口注意事项(1)接口定义用关键字interface,而不是用class。第39页,共72页,星期日,2025年,2月5日(2)接口中定义的数据成员全是publicfinalstatic成员,即常量。(3)接口中没有自身的构造方法,所有成员方法都是publicabstract方法,即抽象方法。(4)接口也具有继承性,可以通过extends关键字声明该接口的父接口。第40页,共72页,星期日,2025年,2月5日一个类要实现接口时,即一个类要调用多个接口时,要注意以下几点。:(1)在类中,用implements关键字就可以调用接口。一个类可以调用多个接口,这时,在implements后用逗号隔开多个接口的名称。第41页,共72页,星期日,2025年,2月5日(2)如果实现某接口的类不是abstract的抽象类,则在类的定义部分必须实现接口的所有抽象方法,即为所有抽象方法定义方法体,而且方法头部分应该与接口中的定义完全一致,即有完全相同的返回值和参数列表。(3)如果实现某接口的类是abstract的抽象类,则它可以不实现该接口所有的方法。第42页,共72页,星期日