




已阅读5页,还剩29页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
继承,继承,指以原有的类为基础来创建一个新类,从而达到代码复用的目的。 利用继承,可以来创建一个具有公共属性的类,然后根据需要创建具有特有属性的新类以适用于不同的情况。如彩色电视与液晶电视的关系。 Java语言只支持单继承,被继承的类称为父类,继承而来的类则称为子类。 继承是在原有父类基础上添加程序代码建立新类,而这个新类既能够运行自己定义的方法,也可以运行父类中定义的方法,从而复用代码。,继承的实现,定义继承的形式为: 访问权限 class 类名 extends 父类 其中,“访问权限”指public、private,“extends”为继承关键字,后面跟父类名。,1.子类对父类成员的继承,子类继承父类所有的非私有属性的成员变量和成员方法,但不继承父类的构造函数,在子类的构造函数中可以使用super()调用父类的构造函数。 举例:设计一个学生类,属性有姓名(name)、年龄(age)、私房钱(money)。由学生类派生出本科生类Undergraduate和研究生类Graduate,本科生类增加属性:专业(specialty),研究生类增加属性:研究方向(studyDirection)。每个类都有相关数据的输出方法。,class Student /学生类 public String name; /姓名 public int age; /年龄 private int money; /私房钱 class Undergraduate extends Student /本科生类 public String specialty; /专业 class Graduate extends Student /研究生类 public String studyDirection; /研究方向 ,class JCTest public static void main(String args) Undergraduate benKe = new Undergraduate(); benK = “张三“; benKe.age = 22; / benKe.money = 120; /不能继承 benKe.specialty = “计算机网络“; System.out.println(“姓名:“+benK+ “ 年龄:“+benKe.age+ “ 专业:“+benKe.specialty); Graduate yJS = new Graduate(); yJS.name = “李四“; yJS.age = 25; yJS.studyDirection = “嵌入式软件开发“; System.out.println(“姓名:“+yJS.name+“ 年龄:“+yJS.age+“ 研究方向:“+yJS.studyDirection); ,2. 构造方法的调用,子类可以继承父类的非私有成员变量和方法,但不能继承父类的构造方法,但可调用父类构造方法: (1)子类可以无条件地调用父类不含参数的构造方法; (2)对于父类中包含有参数的构造方法,子类可以通过在自己的构造方法中使用super关键字来引用,而且必须是子类构造方法中的第一条语句。,super,super引用。使用关键字super可以引用被子类隐藏的父类的成员变量或或被子类重写的方法,这称为super引用。super引用的语句格式为: super.成员变量名 super.方法名 特别注意: (1)在子类构造方法中,使用super调用父类构造方法的语句必须为构造方法中的第一个语句。 (2)当父类中没有构造方法或只有无参构造方法时,系统会为子类构造方法自动加上super语句,相当于显示在构造方法中调用super()。 (3)子类构造方法的第一个语句是使用this关键字来调用本类的另一个构造方法,那么,Java系统就不会默认该子类的构造方法隐含调用父类的构造方法。,3、类的成员覆盖,在类的继承中,若子类新增的成员名称与父类成员相同,则称为成员覆盖(overriding)。其目的是修改父类的属性和行为。 若子类声明了与父类同名的变量,则父类的变量被隐藏起来,直接使用的是子类的变量,但父类的变量仍占据空间,可通过super或父类名来访问。,在子类中定义了与父类同名的变量,从而隐藏了父类成员变量,这种隐藏变量可加super前缀来访问。 class A int x = 100; class B extends A int x = 200; void print() System.out.println(“Subclass : “ + x); System.out.println(“Superclass : “ + super.x); public static void main(String args) (new B().print(); ,程序运行结果: Subclass : 200 Superclass : 100,类的成员覆盖,方法覆盖,Java允许子类对父类的同名方法进行重定义,也就是子类中定义的方法与父类中已定义的方法名称相同,但方法的内容不同,这种多态就称为方法覆盖。 举例:父类有骂人的习惯,子类继承父类后,更改父类的方法,不再具有骂人的习惯。,继承的实现-方法覆盖,class FuLei public void maRen() System.out.println(“God damn you!“); class ZiLei extends FuLei public void maRen() / System.out.print(“我老豆喜欢骂:“); / super.maRen(); System.out.println(“我讲礼貌,我不骂人!“); ,7.3.2 继承的实现-方法覆盖,class FuGaiTest public static void main(String args) ZiLei zl = new ZiLei(); zl.maRen(); ,继承的实现终止覆盖,有时出于安全考虑,需要防止黑客用属于系统重要信息的类来创建其子类,在子类中覆盖原有的类的方法。 为保证父类方法不会被子类中定义的方法替代,就要在方法之前使用“final”关键字来修饰该方法。 举例:级上例添加一个final方法,演示终止覆盖。,在进行覆盖时,应该注意以下三点: 子类不能覆盖父类中声明为final或static 的方法; 子类必须覆盖父类中声明为abstract 的方法,或者子类也声明为abstract; 子类覆盖父类中同名方法时,子类方法声明必须与父类被覆盖方法的声明一样。,覆盖和重载的区别,覆盖和重载的区别 (1)方法的覆盖是子类和父类间的关系,而方法的重载是同一类内部多个方法间的关系。 (2)方法的覆盖一般是两个方法间的,而重载时可能有多个重载方法。 (3)覆盖的方法有相同的方法名和形参表,而重载的方法只能由相同的方法名,不能有相同的形参表。,多态性,1 抽象类,类中允许定义抽象方法。所谓抽象方法是指只有方法的定义,没有方法的实现体的方法。用关键字abstract来声明抽象方法。例如: abstract void run() 包含抽象方法的类称为抽象类。换句话说,任何包含抽象方法的类必须被声明为抽象类。例如: abstract class Runner 需要说明的是: 构造方法不能被声明为抽象的 abstract和static不能同时存在,即不能有abstract static方法 抽象类不能直接用来定义对象。抽象类主要用于定义为若干个功能类同的类的父类 抽象类的子类必须覆盖所有的抽象方法后才能被实例化,否则这个子类还是抽象类,abstract class A int x; int y; abstract int aa(int x,int y); void A() x=0; y=0; class B extends A int aa(int x,int y) return x+y; ,2 最终类,最终类是指不能被继承的类,即不能再用最终类派生子类。如果不希望某个类被继承,可以声明这个类为最终类。最终类用关键字final来说明。例如: public final class C 如果创建最终类似乎不必要,而又想保护类中的一些方法不被覆盖,可以用关键字final来指明那些不能被子类覆盖的方法,这些方法称为最终方法。例如: public class A public final void M(); ,1)final标记的类不能被继承,final class Person class Student extends Person /非法 Student类不能在继承Person类,2)final标记的方法不能被子类重写,class Person public String name; public int age; final public void getInfo() class Student extends Person public String name; public int age; public void getInfo() /非法 public void study() ,3)final标记的变量,final标记的变量(成员变量和局部变量)即成为常量,只能赋值一次,赋值的位置: (a)初始化位置 (b)构造方法中 class Person public final String x= “abc“ ; public String name; public int age; public Person() x= “abc“ ; public Person(String name,int age) x= “abc“ ; 要在每一个构造方法中做相同的工作。,接口,Java语言只支持单继承机制,不支持多继承。一般情况下,单继承就可以解决大部分子类对父类的继承问题。但是,当问题复杂时,若只使用单继承,可能会给设计带来许多麻烦。Java语言解决这个问题的方法是使用接口 接口和抽象类非常相似,都是只定义了类中的方法,没有给出方法的实现 Java语言不仅规定一个子类只能直接继承自一个父类,同时允许一个子类可以实现多个接口。由于接口和抽象类的功能类同,因此,Java语言的多继承机制是借助于接口来实现的 接口是抽象方法和常量值定义的集合,接口是一种特殊的抽象类,这种抽象类中只包含常量和方法两种定义,而没有变量和方法的实现。,1) 定义接口,接口的定义格式为: public interface 接口名extends父接口名列表 /接口体 /常量域声明 public static final 域类型 域名常量值; /抽象方法声明 public abstract 返回值 方法名(参数列表); ,/*abstract class A public static final int ID=1 abstract int aa(int x,int y); abstract void bb(); */ interface A int ID=1; int aa(int x,int y); void bb(); ,接口中的成员都是public访问类型,接口中的常量默认是用public static final标识的。 接口中不能定义静态方法 可以定义一个新的接口用extends去继承一个已有的接口。可以定义一个类用implements去实现一个接口中的所有方法,也可以定义一个抽象类用implemen去实现一个接口中定义的部分方法。 一个类可以继承一个父类的同时,实现一个或多个接口,extends必须位于 implements之前访问接口中的常量,可以用 接口名.常量 实现接口的类名.常量 实现接口的类对象.常量,1接口与抽象类的区别: 接口不能包含任何可以执行的方法,而抽象类可以。 类可以实现多个接口,但只有一个父类。 2一个类要实现接口时,请注意以下问题: 在类的声明部分,用implements关键字声明该类将要实现哪些接口。 如果实现某接口的类不是abstract抽象类,则在类的定义部分必须实现指定接口的所有抽象方法。 如果实现某接口的的类是abstract的抽象类,则它可以不实现该接口所有的方法。但是对于这个抽象类任何一个非抽象的子类而言,它们父类所实现的接口中的所有抽象方法都必须有实在的方法体。 个类在实现某接口的抽象方法时,必须使用完全相同方法头。如果所实现的方法与抽象方法有相同的方法名和不同的参数列表,则只是在重载一个新的方法,而不是实现已有的抽象方法。 接口的抽象方法的访问限制符都已制定为public,所以类在实现方法时,必须显式地使用public修饰符,否则将被系统警告为缩小了接口中定义的方法的访问控制范围。,包,1、包的用途 Java允许把多个类收集在一起成为一组,称作包(package)。 Java为我们提供了大约130多个包,这些包可以直接引用。比如: java.awt 包含抽象窗口工具集中的图形,文本,窗口GUI 类 java.awt.image包含抽象窗口工具集中的图像处理类 java.lang 包含所有的基本语言类 包含所有实现网络功能的类 java.until 包含有用的数据类型类 提示: 在一个Java源文件里可以有多个import语句。,2、包的创建 Java包是可以具有层次性的,即可以进行包的嵌套。实现把相关的类组合进一个包,把相关的包组合进一个更大的包。 包的创建,基本形式为: package pkg1.pkg2.pkg3;, 包的声明语句必须
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 教育心理学与领导力培养提高学生团队中领导力的参与度提升方法
- 辽宁何氏医学院《高级健康评估》2023-2024学年第二学期期末试卷
- 五邑大学《人体解剖生理学及实验》2023-2024学年第二学期期末试卷
- 从AR到区块链探索教育技术的未来趋势
- 昆山登云科技职业学院《初等数论》2023-2024学年第二学期期末试卷
- 中山职业技术学院《现代通信技术》2023-2024学年第二学期期末试卷
- 三亚城市职业学院《辐射剂量学》2023-2024学年第二学期期末试卷
- 海南医学院《语文教材研究与教学设计》2023-2024学年第二学期期末试卷
- 许昌电气职业学院《临床技能综合训练(Ⅲ)》2023-2024学年第二学期期末试卷
- 2024年度河南省护师类之社区护理主管护师提升训练试卷B卷附答案
- 2025-2030中国伊利石行业运营效益及竞争策略展望分析报告
- 2025春季学期国开电大本科《管理英语3》一平台机考真题及答案(第十套)
- 2025江苏扬州宝应县“乡村振兴青年人才”招聘67人笔试备考试题及答案详解一套
- 2025年泸州市中考语文试卷真题
- 湖南省2025年高考公安院校公安专业考生档案审核表
- 地理:(网络参考版)黑吉辽蒙2025年高考真题地理试卷含答案
- 2025新修订《全国人民代表大会和地方各级人民代表大会代表法》宣讲
- 部编人教版八年级语文下册期末各单元重点知识
- 2025年动漫IP产业链构建与动漫产业产业链协同效应研究报告
- 2025年安全员之A证企业负责人模拟题库及答案(附答案)
- 食管癌全程管理专家共识(2025)解读
评论
0/150
提交评论