java抽象类和接口

上传人:沈*** 文档编号:244551915 上传时间:2024-10-05 格式:PPT 页数:24 大小:170.50KB
返回 下载 相关 举报
java抽象类和接口_第1页
第1页 / 共24页
java抽象类和接口_第2页
第2页 / 共24页
java抽象类和接口_第3页
第3页 / 共24页
点击查看更多>>
资源描述
Click to edit Master title style,Click to edit Master text styles,Second Level,Third Level,Fourth Level,Fifth Level,Abstract Class and Interface,抽象类和接口,抽象类,例:假设每个与形状有关的类都定义了,display,方法,用来显示具体对象的形状。,Shape,Rect,Triangle,Ellipse,Square,Circle,此时,可以利用多态性编写代码,用来显示各种形状:,Shape shapeBody=new Shape20;,shapeBody0=new Rect();,shapeBody1=new Shape();,for(int i=0;i20;i+),shapeBodyi.display();,然而,由于,Shape,是一个抽象的概念,如果它也有,display,方法就不太合情理。可以做以下几种考虑:,去掉,Shape,类的,display,方法,损失了多态性的优点。可能导致程序出错,如上例。,将,Shape,类的,display,方法定义成空语句,public void display(),将,Shape,类的,display,方法定义成抽象方法,abstract,class Shape,public abstract void display();,当一个类中包含了抽象的方法,此类就被认为是一个抽象类。此时,Shape,就不能被实例化了,从而在编译时就避免了采用第,1,种方法可能出现的错误。,练习:编写抽象类,Person,,具有抽象方法,study(),,然后编写子类,Student,和,Professor,,实现父类抽象方法,抽象类的特点,抽象类中的方法不一定都是抽象的,抽象类中可以包含抽象的方法,也可以包含具体的方法。,不能实例化抽象类,例:如果,Course,是抽象类,则以下语句是错误的,Course c=new Course();,但是可以声明对,Course,对象的引用:,Course x;,抽象类有子类的时候,除非子类采用具体的方法替代抽象类中的全部抽象方法,否则子类本身也被自动被认为是抽象的。,抽象类之所以被称之为“抽象”的,是因为抽象类省略了要执行的一种或多种特定行为的细节。,接口,接口比抽象类更抽象,它仅仅声明了方法。,例如:为了教学,对象可能需要提供以下服务:,同意教授特定的课程,指定课程所使用的教科书,定义课程的授课提纲,批准特定的学生参加课程学习,此时可以建立关于一个,Teacher,的接口:,interface,Teacher,public void,agreeToTeach(Course,c);,public void,designateTextbook(Textbook,b,Course c);,public syllabus,defineSyllabus(Course,c);,public,boolean,approveEnrollmen(Student,s,Course c);,有了,Teacher,接口,就可以把对象的各种类指定为教师,例如:可以认为,Professor,能够教学,,Student,能够教学,一般的,Person,也可以教学:,class Professor,implements,Teacher,String name;,Sting,emplyeeId,;,public void,agreeToTeach(Course,c),/,编写代码,public void,designateTextbook(Textbook,b,Course c),/,编写代码,public syllabus,defineSyllabus(Course,c),/,编写代码,public,boolean,approveEnrollmen(Student,s,Course c),/,编写代码,练习:在上一个练习中添加,Teacher,接口,让,Professor,类实现该接口,并添加助教类:,AsistantProfessor,,担任助教的人是研究生,他们具有是具有教学能力的学生,说明:,通过这样的定义,,Professor,类替代了,Teacher,接口的所有方法,因此,Professor,类是一个具体的类。,但是如果,Professor,类没有替换所有的接口,则,Professor,类只能看成是一个抽象的类。编译器会要求在,Professor,类的前面加上,abstract,关键字。,因此,,实现接口,实际上就是在创建抽象类的子类时,给抽象方法“加上具体的内容”。,接口与抽象类的不同在于:,接口只抽象行为,而抽象类则要指定属性、具体的方法和抽象的方法。,一个类可以继承自多个接口,例如:还有一个,Administrator,接口:,interface Administrator,public,boolean,approveNewCourse(Course,c);,public,hireProfessor,(Professor p);,则可以指定类实现,Teacher,和,Administrator,接口:,class Professor,implements Teacher,Administrator,在这种情况下,类需要替代这两个接口所定义的所有方法。,用接口实现多重继承,问:为什么,Java,不支持多重继承?,答:因为当一个子类从两个以上的父类继承下来的时候,可能会出现属性和方法重复或冲突的现象。,Person,String name,Student,String major,int id,Professor,String title,String id,ProfessorStudent,ProfessorStudent,继承的属性,String name,String major,int id,String name,(,重复,),String title,String id,(,冲突,),Professor,可以讲课,,Student,类可以听课,为了描述能讲课的学生定义了,ProfessorStudent,类。,多重继承时方法也会发生冲突:,class A,public void f(),class D extends,B,extends,C,public void h(),f();,g();,class C extends A,public void g(),class B extends A,public void g(),当在,D,中使用,f(),时,有,B,和,C,二条路径到达,A,中的,f();,在,D,中调用,g();,时,无法确定是调用哪个基础类的,g(),方法,分析:,多重继承发生问题原因之一在于属性(数据结构)冲突,也就是存储空间的冲突。由于接口不与任何存储空间相关联,因此可以解决存储空间冲突的问题。,对于继承的方法的冲突,当使用接口之后,由于接口只定义了方法的抽象,没有具体的执行代码,因此也不会发生代码冲突的问题。,在此例中把与讲课有关的所有要素提取出来,放入,Teacher,接口。此时,,ProfessorStudent,类和,Teacher,类都具有了讲课的能力。,语句格式:,class,ProfessorStudent,extends,Student,implements,Teacher,Person,类,Student,类,Professor,类,Teacher,接口,ProfessorStudent,总结:,一个类可以继承自一个抽象类或具体类,以及多个接口。,抽象类或具体类,接口,1,接口,2,接口,n,子类,子类只有将接口中声明的所有方法,以及抽象类中所有的抽象方法都进行定义,这个子类才能成为一个“具体”的类,才能实例化。,如果你的基础类可以不带任何属性和方法定义时,可以将它定义成一个接口。只有在必须带有属性和方法定义的时候,才采用抽象类或具体类。,抽象类,page 254-257,说明,非抽象类(具体类)不能包含抽象方法。,如果抽象父类的子类,没有实现所有的抽象方法,它必须声明为抽象的(在这个类声明的前面加上,abstract,关键词)。,也就是说,在一个由抽象类扩展出来的非抽象类中,所有的抽象方法都必须实现,及时这个子类不使用它们。,Page 257,说明,抽象类不能用,new,运算符实例化,但仍以定义它的构造方法,这种构造方法将在它子类的构造方法中被调用。,说明(了解),允许声明没有抽象方法的抽象类。(用于定义新子类),子类可以被声明是抽象的,即使它的父类是具体的。,子类可以覆盖它父类的方法,并将其声明为抽象的。(当父类方法中的实现在子类中无效时),说明,不能用,new,运算符创建抽象类的实例,但是,抽象类可以用作数据类型。,下面的语句创建了一个元素是,GeometricObject,类型的数组:,GeometricObject,geo=new GeometricObject10;,接口,接口(,interface,),是一种与类相似的结构,只包含常量和抽象方法。接口在许多方面与抽象类相近,但是抽象类出来包含常量和抽象方法之外,还可以包含变量和具体方法。,为了区分接口 和类,,Java,采用以下语法声明接口,:,public,interface,InterfaceName,constant declarations;/*,常量声明*,/,method signatures;/*,方法头标志*,/,Page 260,接口是一个特殊的类,在,Java,中,接口被看成是特殊的类。,和类一样,每个接口编译为独立的字节码文件。,接口的使用与抽象类很相似。例如:不能使用,new,操作符创建一个接口的实例;可以使用接口作为变量的数据类型等。,接口与抽象类,接口中的数据必须是常量;,抽象类中的数据可以有常量,也可以有变量。,接口中的方法只有一个头标志,没有实现部分;,抽象类中可以有抽象的方法,也可以有具体的方法。,Page 262,接口与抽象类,在接口中,所有的数据域都是,public,final,static,的,所有的方法都是,public,abstract,的,.,由于这个原因,这些修饰可以忽略,如下所示:,提示:接口中的常量能用下面的方式访问:,接口名,.,常量名,(,例如,T1.K,).,接口与抽象类,所有的类共享同一个根:,Object,类,但接口没有共同的根。,与类相似,接口也可以定义一个类型。,一个接口类型的变量可以引用任何实现该接口的类的实例。,如果一个类实现了一个接口,这个接口就类似于该类的一个父类。可以将一个接口当作一个数据类型使用,能够将接口类型的变量转换到它的子类,反过来也可以。,接口与抽象类,假设,c,是,Class2,类的一个实例,则,c,也是,Object,Class1,Interface1,Interface1_1,Interface1_2,Interface2_1,和,Interface2_2,的实例,.,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!