java速成第六章继承和多态.ppt





《java速成第六章继承和多态.ppt》由会员分享,可在线阅读,更多相关《java速成第六章继承和多态.ppt(65页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第六章面向对象三、类的继承三、类的继承在在 Java Java 中,中,类是一个是一个层次次结构,其中构,其中ObjectObject为特殊超特殊超类或基或基类,所有的,所有的类都直接或都直接或间接地接地继承承ObjectObject类;子子类继承父承父类的属性和方法,同的属性和方法,同时也可以修改父也可以修改父类的属性或重的属性或重载父父类的方法,以及在父的方法,以及在父类的基的基础上添加新的属性和方法。因此,父上添加新的属性和方法。因此,父类和子和子类之之间反映的是反映的是“一般与特殊一般与特殊”的关系。的关系。父类与子类在类的继承中,被继承的类称为父类,继承而来的类则称为子类。有多个子类
2、共同继承一个父类,那么这个父类就是多个类的基类。Java语言只支持单继承,如果要定义多继承,可以使用将要讲解的接口方法。何时选择继承性?一个很好的经验:“B是一个A吗?”如果是则让B做A的子类.常犯的错误常犯的错误A有一个有一个B吗吗?例如让汽例如让汽车轮子成为汽车的子类是错误的车轮子成为汽车的子类是错误的继承的实现定定义继承的形式承的形式为:访问权限限 class 类名名 extends 父父类 类体体 Java中的中的继承是通承是通过extends关关键字来字来实现的,在定的,在定义类时使用使用extends关关键字指字指明新定明新定义类的父的父类,就在两个,就在两个类之之间建立了建立了继
3、承关系。承关系。新定新定义的的类称称为子子类,它可以从父,它可以从父类那里那里继承所有非承所有非private的属性和方法的属性和方法作作为自己的成自己的成员。继承举例党员类学生类学生党员学生类在职学生脱产学生一个类有多个父类:多继承一个类只有一个父类:单继承任务6-1publicclassStudentStringname;/姓名 intNo;/学号StringInfo()return姓名:+name+学号:+No;public class onJobStudent extends Studentpublicpublic classclass testOnJobStudent publicp
4、ublic staticstatic voidvoid main(String args)onJobStudent li=newnew onJobStudent();li.name=李丽;li.No=20080101;System.out.println(li.Info();程序输出:姓名:李丽学号:20080101程序说明:子类自动拥有父类的非私有属性和方法public class StudentString name;/姓名int No;/学号 String Info()return 姓名:+name+学号:+No;任务6-2public class onJobStudent extend
5、s Student String title;/职称 String company;/所在单位 void printWorkMsg()System.out.println(职称:+title+单位:+company);子类onJobStudent添加了两个属性和一个方法public class testOnJobStudent public static void main(String args)onJobStudent zhang=new onJobStudent();zhang.name=张三;zhang.No=20081002;pany=广州宝杰公司;zhang.title=工程师;S
6、ystem.out.println(zhang.Info();zhang.printWorkMsg();任务6-2姓名:张三 学号:20081002职称:工程师 单位:广州宝杰公司Student类类变量:name No方法:String Info()onJobStudent类类变量:name No方法:String Info()变量:company title方法:void printWorkMsg()从父类继承的变量从父类继承的方法任务6-2任务12总结子类自动拥有父类非私有变量子类可以在继承父类后再添加属于自己的属性和方法课后实训一、类的多层继承(1)设计一个Point类,包含横坐标x和纵
7、坐标y。(2)设计一个Circle类,继承Point类,并添加int类型的变量radius(半径),求面积方法doublearea()和求周长方法doubleperimeter()。(3)设计一个Cylindar类,继承Circle类,并添加int类型的变量height(高度),求体积方法doublevolumn()。(4)编写测试程序test类,实现下列功能:在main函数中生成两个点p1(3,4)和p2(5,6),生成一个圆c1,圆心在(0,0),半径为3,计算并输出圆c1的面积和周长生成一个圆柱cy1,底面的圆的圆心在(0,0),半径为3,高度为4,计算并输出圆柱cy1的体积备注:每个类
8、都暂时不用构造方法为变量备注:每个类都暂时不用构造方法为变量赋值赋值 直接给属性赋值直接给属性赋值如如 Point p=new Point();p.x=3;p.y=5;实训提示Point类类xydouble area()()circle类类xyradiusdouble perimeter()()继承继承double area()()cylindar类类xyradiusdouble perimeter()()heightdouble volumn()()在test类的Main函数中生成两个点一个圆一个圆柱public class StudentString name;/姓名int No;/学号S
9、tring address=广州精英学院;/学校地址 String Info()return 姓名:+name+学号:+No;/子类对父类同名变量的覆盖public class onJobStudent extends Student String company;/工作单位String title;/职称String address=广州工业大道1001号;/单位地址void printAddress()System.out.println(单位地址:+address);任务6-3:子类与父类变量同名public class testStudent public static void ma
10、in(String args)onJobStudent zhang=new onJobStudent();zhang.printAddress();单位地址:广州市工业大道1001号程序输出:任务6-3:子类与父类变量同名public class StudentString name;/姓名int No;/学号 String Info()return 姓名:+name+t学号:+No;public class onJobStudent extends Student String title;/职称 String company;/所在单位 String Info()return 姓名:+na
11、me+t学号:+No+n职称:+title+t单位:+company;任务6-4:子类与父类方法同名publicclasstestStudentpublicstaticvoidmain(Stringargs)onJobStudentzhang=newonJobStudent();zhang.name=张三;zhang.No=20081002;pany=广州宝杰公司;zhang.title=工程师;System.out.println(zhang.Info();姓名:张三学号:20081002职称:工程师 单位:广州宝杰公司任务6-4:子类与父类方法同名onJobStudent类类nameno继
12、承Student类类namenoaddressaddress/重新定义重新定义任务6-3onJobStudent类类nameno继承Student类类namenoInfo()Info()/重新定义重新定义任务6-4titlecompany任务34总结子类和父类如果拥有相同名称的属性和方法,则先找到自己的使用如果要越级使用父类的属性和方法,应该用super关键字5周课内容结束【任任务6-5】情景情景1:子:子类构造方法中构造方法中显式式调用父用父类构造方法构造方法public class Student String name;/姓名 int No;/学号 Student(String aNam
13、e,int aNo)name=aName;No=aNo;System.out.println(一个学生产生,姓名:+this.name+t学号:+this.No);public class onJobStudent extends Student String title;/职称 String company;/所在单位 onJobStudent(String aName,int aNo,String aTitle,String aCompany)super(aName,aNo);/显式调用父类构造函数 this.title=aTitle;pany=aCompany;System.out.pr
14、intln(一个在职学生产生,职称:+this.title+单位:+pany);Super代表父类的构造函数/情景1:子类构造方法中显式调用父类构造方法public class testStudent public static void main(String args)onJobStudent zhang=new onJobStudent(张三,20010909,工程师,广州宝杰公司);一个学生产生,姓名:张三 学号:20010909一个在职学生产生,职称:工程师 单位:广州宝杰公司程序输出:程序输出:onJobStudent类类namenoonJobStudent(StringaName
15、,intaNo,StringaTitle,StringaCompany)继承Student类类namenoStudent(StringaName,intaNo)【任任务6-6】情景情景2:子:子类隐含含调用父用父类不不带参数构参数构造方法造方法public class StudentString name;/姓名int No;/学号 Student()System.out.println(一个学生产生);public class onJobStudent extends Student String title;/职称 String company;/所在单位 onJobStudent()Sy
16、stem.out.println(一个在职学生产生);相当于有Student();自动的拥有的【任任务6-6】情景情景2:子:子类隐含含调用父用父类不不带参数构参数构造方法造方法/情景2:子类隐含调用父类不带参数构造方法publicclasstestStudentpublicstaticvoidmain(Stringargs)onJobStudentli=newonJobStudent();程序输出:程序输出:一个学生产生一个在职学生产生继承Student类类namenoStudent()onJobStudent类类name,noTitle companyonJobStudent()以上两个例
17、子说明,父类的无参数的构造函数,无论子类是否显式调用,它都是存在于子类构造函数中并发挥作用的【任务任务6-7】情景情景3:父类只有带参数构造方法,子父类只有带参数构造方法,子类必须显示调用类必须显示调用class Student String name;/姓名 int No;/学号 Student(String aName,int aNo)name=aName;No=aNo;System.out.println (一个学生产生,姓名:+this.name+t学号:+this.No);public class onJobStudent extends Student String title;/
18、职称 String company;/所在单位重点容易出错!/情景3:父类只有带参数构造方法,子类必须显示调用publicclasstestStudentpublicstaticvoidmain(Stringargs)onJobStudentli=newonJobStudent();Exception in thread main java.lang.Error:无法解析的编译问题:构造函数 onJobStudent()不可视at ch6.eg6_7.testStudent.main(testStudent.java:7)继承Student类类namenoStudent(StringaName
19、,intaNo)onJobStudent类类name,noTitle companypublic class StudentString name;/姓名int No;/学号Student()System.out.println(一个学生产生);public class onJobStudent extends Student String title;/职称 String company;/所在单位【任务任务6-8】情景情景4:子类无构造方法,隐含调用父:子类无构造方法,隐含调用父类无参构造方法类无参构造方法/情景4:子类无构造方法,隐含调用父类无参构造方法publicclasstestSt
20、udentpublicstaticvoidmain(Stringargs)onJobStudentli=newonJobStudent();一个学生产生程序输出:程序输出:继承Student类类namenoStudent()onJobStudent类类name,noTitle company12班6周课内容结束This表示自己本身这个类class TestColor int r,g,b;TestColor(int r,int g,int b)this.r=r;this.g=g;this.b=b;super表示父类public class onJobStudent extends Student
21、 String title;/职称 String company;/所在单位 onJobStudent(String aName,int aNo,String aTitle,String aCompany)super(aName,aNo);/显式调用父类构造函数 this.title=aTitle;pany=aCompany;System.out.println(一个在职学生产生,职称:+this.title+单位:+pany);publicclassScore/示例:包含两个重载方法的类intcheckOnScore;/平时考勤成绩intmidTermScore;/期中考试成绩intfina
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- java 速成 第六 继承

限制150内