




已阅读5页,还剩19页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
4.3 继承和多态,4.3.1父类和子类-继承和继承的实现,定义:类继承是指一个类可以继承其他类所有的非私有成员变量和成员方法。被继承的类称为父类,继承后产生的类称为子类。,格式:,修饰符 class 类名 extends 父类名 类体; ,子类的直接父类是该子类直接继承的类,而间接父类则是两级或两级以上的父类。子类只能有一个直接父亲,称单继承。JAVA中只允许单继承,即仅允许每个类有一个直接父类,不允许有多个直接父类,但一个类可以有多个子类。,子类除了继承父类非私有的属性和方法外,还可以有自己的属性和方法。,子类可以继承父类的构造函数,构造函数的继承遵循以下的原则: 子类无条件地继承父类的不含参数的构造函数。 若子类没有定义自己的构造函数,它将继承父类无参数的构造函数作为自己的构造函数。 若子类定义了自己的构造函数,它先执行继承自父类的无参数构造函数,再执行自己的构造函数。 对父类含参数的构造函数,子类可以通过在定义自己的构造函数中使用super关键字来调用它,但这个调用语句必须是子类构造函数的第一个可执行语句。,附构造函数的继承,例:要求定义三个类:Person类,Student类,测试使用Student类的应用程序类TestStudent.java。其中Person类是Student类的直接父类,定义了姓名、性别、年龄,在Student类中,定义了数学、语文课成绩,并求平均成绩。,/Person.java public class Person protected String name; protected char sex; protected int age; public Person() public Person(String str,char ch,int i) name=str;sex=ch;age=i; public String toString() return “姓名:“+name+“性别:“+sex+“年龄:“+age; ,/Student.java public class Student extends Person protected int chinese,math; public Student() public Student(String str,char ch,int x,int y,int z) name=str;sex=ch;age=x; chinese=y; math=z; public int average() return (chinese+math)/2; ,子类要调用父类的构造函数,可用super()来实现。 这里可替换为: super(str,ch,x),子类构造函数的形参表,只能使用其父类构造函数中用过的形参表,或者是对它的扩充。,/TestStudent.java public class TestStudent public static void main(String args) Student s1=new Student(); System.out.println(“s1:”+s1.toString()+“成绩;“+s1.average(); Student s2=new Student(“Tom“,m,25,88,97); System.out.println(“s2:“+s2.toString()+“成绩;“+s2.average(); ,注:调用子类不含参数的构造函数时,先调用父类不含参数的构造函数,程序运行后,结果为多少?,思考:,4.3.2 子类对父类的变量隐藏和方法覆盖,继承性可以使子类继承父类所有非私有的变量和方法,当一个父类成员不适合该子类时,子类可以重新定义它。,变量的隐藏: 子类重新定义从父类继承来的同名变量。,这时子类若引用父类的同名变量,要用super关键字做前缀: super.变量名,方法的覆盖: 子类重新定义从父类继承来的同名方法。即:方法头与父类一样,方法体不一样。这也是Java多态性的表现之一。,覆盖方法必须和被覆盖方法具有相同的方法名称、参数列表和返回值类型。 覆盖方法时,不能使用比父类中被覆盖的方法更严格的访问权限 。 若子类中调用被覆盖的父类中的同名的方法,可以通过super关键字做前缀: super.方法名(),/Automobile.java public class Automobile public double speed; Automobile() speed=200.0; public double get_speed() return speed; ,/Car.java public class Car extends Automobile public double speed; Car() speed=0.0; public double add_class() speed=speed+1; return speed; public double add_fa_class() super.speed=super.speed+1; return speed; ,/TestCar.java public class TestCar public static void main(String args) car c1=new car(); System.out.println(“speed of car:“+c1.add_class()+“ speed of Automobile:“+c1.get_speed(); System.out.println(“speed of car:“+c1.add_fa_class()+“ speed of Automobile:“+c1.get_speed(); ,程序运行后,结果为多少?,思考:,4.3.3 抽象类和最终类,一、抽象类,Java中可以定义一些不含方法体的方法,它的方法体的实现交给该类的子类根据自己的情况去实现,这样的方法就是抽象方法,包含抽象方法的类就叫抽象类。一个抽象类中可以有多个抽象方法。,abstract 返回值类型 抽象方法(参数列表);,抽象方法的写法:,抽象类必须用abstract关键字来修饰;抽象方法也必须用abstract来修饰,abstract不能用来修饰变量。,含有抽象方法的类肯定是抽象类,抽象类中的某个方法不一定是抽象的。,抽象类不能被实例化,也就是不能用new关键字去产生对象。,如果一个类继承自某个抽象父类,而没有具体实现抽象父类中的抽象方法(编写方法体),则必须定义为抽象类(用abstract修饰)。,抽象类的子类必须覆盖所有的抽象方法后才能被实例化,否则该子类还是个抽象类。,例 编写一个程序,首先定义一个描述平面图形的抽象类Figure,然后派生出圆类Circle和矩形类Rectangle。由于平面图形都有面积,其父类中可定义求面积的方法area()。但子类求面积的方法area()是不同的,因此父类Figure中将area()定义为抽象方法area(),就可以求出子类所描述的形状的面积。,/Figure.java public abstract class Figure protected double x; Figure() Figure(double x1) /定义边长 x=x1; abstract public double area(); public String toString() return “x=“+x; ,/Circle.java public class Circle extends Figure/圆类 public Circle(double x1) super.x=x1; public double area()/具体实现父类中的抽象方法,求圆面积 return 3.14*x*x; public String toString() return “圆:t“+super.toString()+“t area=“+area(); ,/Rectangle.java public class Rectangle extends Figure/长方形类 protected double y; public Rectangle() public Rectangle(double a,double b) super(a); y=b; public double area()/具体实现父类中的抽象方法,求长方形面积 return x*y; ,public String toString() return“长方形t“+super.toString()+“t y=“+y+“t area=“+area(); ,/TestFigure.java public class
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 工业设计在智能产品开发中的作用和价值研究
- 工业领域的智能化数据分析
- 工业设计原理与产品设计创新
- 工业设计的创新方法与技术应用
- 工业风格商业空间设计
- 工业风办公室装修风格解读
- 工作场合有效表达的技巧
- 工厂用电安全操作规范
- 工程力学中动载材料特性研究
- 工程测量中的新方法与新技术探讨
- 部编版高一上册语文第三课《百合花》课文原文教案及知识点
- 北京理工附中小升初分班考试真题
- 膀胱镜检查记录
- 英语社团活动课件
- 学前儿童发展心理学-情感
- 二年级下册数学教案 《生活中的大数》练习课 北师大版
- GB∕T 16762-2020 一般用途钢丝绳吊索特性和技术条件
- 电网施工作业票模板
- T∕CAEPI 31-2021 旋转式沸石吸附浓缩装置技术要求
- 国家级高技能人才培训基地建设项目实施管理办法
- 彩盒成品检验标准
评论
0/150
提交评论