版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第4章类的继承和多态类的继承继承是面向对象程序设计中的一个重要特征。通过必要的说明能够实现某个类无需重新定义就拥有另一个类的某些属性和方法,并把这种关系称为继承。类的继承在 Java 中,类是一个层次结构,其中Object为特殊超类或基类,所有的类都直接或间接地继承Object类;子类继承父类的属性和方法,同时也可以修改父类的属性或重载父类的方法,以及在父类的基础上添加新的属性和方法。因此,父类和子类之间反映的是“一般与特殊”的关系。 父类与子类 在类的继承中,被继承的类称为父类,继承而来的类则称为子类。有多个子类共同继承一个父类,那么这个父类就是多个类的基类。继承的分类单重继承,是指任何一个
2、类都只有一个单一的父类。多重继承是指一个类可以有一个以上的父类,它的静态的数据属性和操作从所有这些父类中继承。Java语言仅支持类的单重继承。 类的继承继承的实现定义继承的形式为:修饰符 class 类名 extends 父类 类体 Java中的继承是通过extends关键字来实现的,在定义类时使用extends关键字指明新定义类的父类,就在两个类之间建立了继承关系。新定义的类称为子类,它可以从父类那里继承所有非private的属性和方法作为自己的成员。修饰符说明类的访问权限(public),是否为抽象类(abstract)或最终类(final)继承原则子类继承父类的所有成员变量(包括实例和类
3、成员变量)和除构造方法外所有的方法(包括实例和类成员方法),但不包括父类中的由private修饰的部分子类不能继承父类的构造方法,因为父类的构造方法用来创建父类的对象,子类需定义自己的构造方法,用来创建子类自己的对象。子类中新增加的属性和方法是对父类的扩展子类中定义的与父类同名的属性是对父类属性的隐藏,同名的方法是对父类方法的覆盖Java实例成员变量的继承子类在继承父类成员变量时,只继承父类中非私有的成员变量。class Shape public int x,y; private int m,n; public Shape() /父类Shape的构造方法 x=10; y=20; m=100;
4、n=200; System.out.println(x=+x+ +y=+y); System.out.println(this is a Constractor of shape); public void measure() int s; s=x*y; System.out.println(result=+s); private void show() System.out.println(x=+x+ +y=+y); Java实例(续)class Rectangle extends Shape public static void main(String args) int width=30
5、,height=10; Rectangle tt=new Rectangle(); /创建对象时要引用构造方法 tt.x=width; tt.y=height; tt.measure(); /* width=tt.m; 对于Rectangle子类不能继承父类的私有成员变量的值,所以此语句会产生语法错误*/ / height=tt.n; 与上相同 / tt.show(); /不能引用show()私有方法 super和this引用在子类中可以声明与父类同名的成员变量及成员方法,为了指明是引用父类中的成员可以使用super关键字,为了指明是引用子类中的成员可以使用this关键字。super在子类中可
6、以使用super引用父类成员变量、成员方法及构造方法。当子类中没有声明与父类同名且同参数表的成员方法,调用父类的成员方法可以不使用super;当子类中声明了与父类中同名且同参数表的成员方法时,为了调用父类的成员方法,必须使用super,否则调用的是子类中的同名且同参数的成员方法。在子类的构造方法中,可以通过super调用父类的构造方法,其调用形式如下: super(参数表) 此处的参数表由父类构造方法的参数表决定,并且super()必须是子类构造方法体中的首语句。Java实例成员变量同名class SuperA private int privateData=10; public int pu
7、bSuperData; private void privateMethod()System.out.println(super privateData=+privateData);System.out.println(Super classs privateMethod); public void pubSuperMethod()privateMethod();System.out.println(Super classs publicSuperMethod); Java实例(续)class SubB extends SuperA private int privateData=20; pr
8、ivate void privateMethod()System.out.println(sub privateData=+privateData);System.out.println(Subclasss privateMethod); public void pubSubMethod()privateMethod();super.pubSuperMethod();System.out.println(Subclasss publicSubMethod); public class ExtendTest2 public static void main(String args)SubB t=
9、new SubB();t.pubSubMethod(); class Shape public int y; public Shape() y=20; System.out.println(this is a Constractor of shape); public void measure() System.out.println(super_y=+y); class Rectangle extends Shape public int y; public void measure() super.measure(); /引用父类的measure()方法 y=super.y+y;Java实
10、例(续)System.out.println(Shape.y=+super.y); /引用父类的成员变量y System.out.println(Rectangle.y=+y); /引用子类的成员变量y class OverLay public static void main(String args) int width=30,height=10; Rectangle tt=new Rectangle(); tt.y=height; /将height变量的值10赋给子类的成员变量y tt.measure(); /引用子类的measure()方法 this 可以使用this引用当前对象的成员变
11、量、成员方法和构造方法。(1)调用成员变量this.成员变量名当成员方法中没有与成员变量同名的参数时,this可以省略。但当成员方法中有与成员变量同名的参数时, this不可以省略。因为成员方法中缺省的是引用方法中的参数。(2)调用成员方法 this.成员方法名(参数表)(3)调用构造方法 在有多个构造方法时,可以通过this调用本类中具有不同参数表的构造方法。调用形式如下: this(参数表)例子Example309例子Testthis2Java实例super和this的使用class EmployeeString name;Employee(String name)=na
12、me;public void showInfo()System.out.println(this is superClass call:+name);public void getInfo()showInfo();class Manage extends EmployeeString name;/注意与父类同名的成员变量String department;Manage(String n)super(n);Java实例(续)public void showInfo()super.showInfo(); /调用父类的方法System.out.println(this is subClass cal
13、l:+name);System.out.println(department);public class CoverMethodpublic static void main(String args)Manage aa=new Manage(李四);=张三;aa.department=经理室;aa.getInfo();演示this和super的使用public class InheritDemo3 extends SuperClass float a =4f; public void print() int a =5; super.print(); System.out.prin
14、tln(InheritDemo3); System.out.println(a); System.out.println(this.a); System.out.println(super.a); public static void main(String args) InheritDemo3 id3 = new InheritDemo3(); id3.print(); class SuperClass int a=3; public void print() System.out.println(SuperClass); 运行结果:SuperClassInheritDemo354.03类的
15、多态性多态是指一个程序中存在着同名的不同方法。在面向对象的程序中多态表现为,可以利用重载在同一类中定义多个同名的不同方法实现多态,也可以通过子类对父类方法的覆盖实现多态。两种情况:覆盖:在子类中直接定义和父类同样的属性和方法,但重新编写了方法体,即子类与父类方法的形参与返回值都相同,而内部处理不同,这种方法在使用过程中,Java虚拟机会根据调用这个方法的类来确定哪个方法被调用重载:同一个类定义中有多个同名的方法,但有不同的形参,而且每个方法有不同的方法体,调用时根据形参的个数和类型来决定调用的是哪个方法 注:不能根据返回值的类型来区分重载的方法构造方法的重载 实例public class Po
16、int protected int x, y; public Point() setPoint( 0, 0 ); public Point( int a, int b ) setPoint( a, b ); public void setPoint( int a, int b ) x = a; y = b; public int getX() return x; public int getY() return y; public String toString() return + x + , + y + ; 覆盖子类与父类成员变量同名子类中定义的成员变量与父类中的成员变量名称相同 ;子类在引用与父类成员变量同名的此成员变量时,默认是引用子类自己定义的成员变量,而将从父类那里继承而来的成员变量“隐藏”起来;如果在子类程序中要引用与子类同名的父类的成员变量时,可以使用“super”关键字来指示; 例子Example313覆盖和重载的区别方法的覆盖是子类和父类之间的关系,而重载是同一类内部多个方法间的关系方法的覆盖一般是两个方法间的,而重载时可能有多个重载方法覆盖的方法有相同的方法名和形参表,而重载的方法只能有相同的方法名,不能有相同的形参表覆盖时区分方法
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年云南省大理白族自治州单招职业倾向性测试题库含答案详解
- 2026年上海立信会计金融学院单招职业适应性考试题库含答案详解(a卷)
- 2026年上海大学单招职业倾向性考试题库及完整答案详解一套
- 2026年云南省临沧地区单招职业倾向性测试题库附参考答案详解(典型题)
- 2026年亳州职业技术学院单招综合素质考试题库附参考答案详解(预热题)
- 2026年云南省大理白族自治州单招职业倾向性考试题库含答案详解(考试直接用)
- 2026年中山火炬职业技术学院单招职业倾向性考试题库附答案详解(综合卷)
- 2026年云南省楚雄彝族自治州单招职业适应性测试题库及参考答案详解1套
- 2026年上海戏剧学院单招职业倾向性考试题库附答案详解(研优卷)
- 2026年上海立达学院单招职业技能测试题库附参考答案详解(典型题)
- 豪迈创新管理办法
- 脑出血恢复期的护理课件
- 数字营销课件模块三数字化消费者行为
- 景观照明设施养护服务方案投标文件(技术方案)
- 儿童中医养生保健方案
- 苏教牛津译林版小学英语六年级上册单词背诵默写本
- 高中英语词汇3500词(必背)-excel版
- 房产公司工程部经理岗位职责
- 四川省高职院校单独招生文化考试(中职类)数学模拟试题
- 老年康复患者住院病案书写要点专家共识
- GB/T 21499-2024粮油检验稻谷和糙米潜在出米率测定方法
评论
0/150
提交评论