第7章 抽象类与接口.ppt

  1. 1、本文档共63页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第7章 抽象类与接口

Java语言与系统设计 中南大学信息科学与工程学院 计算机工程系 黄家玮 jiaweihuang@ 第7章 抽象类与接口 抽象类的定义和使用 接口的定义和使用 包的声明和引入 类的应用程序举例 抽象类 有时,定义的类代表一个抽象的概念,就不能用它来实例化一个对象。例如,现实世界中食品这个概念,不可能有一个食品对象,可以见到的是一些诸如饼干、苹果、巧克力等具体对象。食品代表着一个抽象的概念:能吃的东西。 同样在面向对象程序设计中,可能需要建立一个不需要实例化的类,就抽象类。 在Java语言中,使用abstract修饰的类被称作抽象类,不能用它实例化一个对象,它只能被继承,反映现实世界中一个抽象的概念。 抽象类往往用来表征我们在对问题域进行分析、设计中得出的抽象概念,是对一系列看上去不同,但是本质上相同的具体概念的抽象。 正是因为抽象的概念在问题域没有对应的具体概念,所以用以表征抽象概念的抽象类是不能够实例化的。 抽象类的定义形式: 一般格式如下: abstract? class? 类名 { ?? 类体 ?? } 抽象类是不能直接实例化对象的类。也即抽象类不能使用new运算符去创建对象。 抽象类一般包括一个或几个抽象方法。所谓抽象方法需在abstract修饰符进行修饰,抽象方法只有方法的声明部分,没有具体的方法实现部分。抽象类的子类必须重写父类的抽象方法,才能实例子化,否则子类也是一个抽象类。 抽象类中不一定包含抽象方法,但是包含抽象方法的类必须说明为抽象类。 抽象方法不同与一般的方法,一般方法既有方法头又有方法体,是一个方法的完整定义;抽象方法只有方法头,或者叫方法的声明,而没有方法体,或者说没有给出方法的具体实现,在方法头后面直接使用分号来结束抽象方法的定义。 实例: abstract class? Animal { ? ?String?? name;????? ?? Animal(String name){???????? ????=name; ?? } ?void getname(){??????????? ? ???? System.out.println(Animals name is+name); ? } ?abstract void? move();??? //? 抽象方法,用abstract 修饰 ?} class Dog extends Animal{ int age; Dog(String name,int age){ super(name); this.age=age; } void move(){ System.out.println(Dog is running!); } void getage(){ System.out.println(Dog is +age+ years old); } } public class AbstractDemo{ public static void main(String args[]){ Dog d=new Dog(wangwang,5); d.move(); d.getname(); d.getage(); } } 定义抽象类需要在一般类定义格式中的关键字class前面,使用关键字修饰符abstract。 定义抽象类中的每个抽象方法也需要在方法头的前面使用关键字abstract作为修饰符,在方法头的后面使用分号结束。 因为类中包含有抽象方法,抽象方法只有方法头,没有方法体,不能被调用执行,所以抽象类不能使用new运算进行实例化。但可以定义抽象类的引用对象,用来引用其派生类中的实例对象,以便实现多态性。 抽象方法将在抽象类的派生类中被实现。抽象类中也可以包含非抽象方法。如果一个抽象类除了抽象方法外什么都没有,则使用接口更合适。 实例: abstract class BBB { //平面几何图形的抽象类 double x,y; //平面的长和宽 BBB() {x=0; y=0;} //无参构造函数 BBB(double xx, double yy) {x=xx; y=yy;} //带参构造函数 abstract double area(); //求面积的抽象方法 abstract double girth(); //求周长的抽象方法 } class CCC extends BBB { //矩形类 CCC() {super();} CCC(d

文档评论(0)

dajuhyy + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档