欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > PPT文档下载  

    利用已有成果继承与多态.ppt

    • 资源ID:5611229       资源大小:725.51KB        全文页数:58页
    • 资源格式: PPT        下载积分:10金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要10金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    利用已有成果继承与多态.ppt

    第5章 利用已有成果:继承与多态,思考:在编写大型应用程序的时候,如果所定义的类已经被使用,应如何提高程序的可维护性?既要保证程序修改后不影响使用,又要对程序的功能不断扩充。,1、直接改动源代码,使之实现新的功能2、复制原有代码,对复制的代码进行改动,5.1继承,由此产生的一些问题:,一、修改过程中很容易产生一些新的错误,导致原有程序运行不正确;二、复制代码的时候可能产生错误,而且使程序的可移植性和重用性变差。,5.1继承,1.继承概念的提出 面向对象的方法与人类的思维方法相似,对象就是对事物特点的必要抽象。人在认识事物的时候也经过抽象,并且抽象是分层次的。,在程序中定义类的时候,如果发现它的某些成员(变量及方法)已经在另一个类中定义过了,如果再定义就显得累赘。,5.1继承,2.继承的要点新类必须在已有类的基础上构造。在已有类的基础上构造新类的过程称为派生。派生出的新类称为已有类的子类。已有类称为超类(父类)。子类继承父类的方法和属性。,5.1继承,3.继承的特点继承是一种由已有的类创建新类的机制,是面向对象程序设计的基石之一。继承体现了软件的复用,子类继承父类:父类中的属性不需要再定义。父类中的方法不需要再重新编写。子类继承父类的非私有属性和方法,还可以定义新的属性和方法,改写父类的方法。子类是在父类的基础上,做一些个性化的定义。Java中每个类都有父类。隐含为java.lang包中的Object类。,5.1继承,5.1继承,关于改写父类方法与子类个性化定义,能继承?不能继承?,类的继承树,学生,小学生,中学生,大学生,研究生,本科生,在学生类中定义好各类学生共性的内容,各子类中只需定义自己特有的内容。父类学生类实际上是对各类学生的概括和抽象。,类的继承树,图形,三维图形,二维图形,园形,三角形,矩形,正方形,圆锥体,球体,立方体,各种电话卡类及其间的继承关系,4.继承的定义Java中通过关键字extends来定义两个类之间的继承关系,extends后面是父类,前面是新定义的子类:modifier class className extends superClass,5.1继承,实例:public class Automobile extends Vehicle/Vehicle是父类,Automobile是子类注意:子类、父类的关系是相对而言的!如:public class Car extends Automobile/Automobile是父类,Car是子类,5.1继承,继承有什么作用?(1)继承能够使子类拥有父类的非私有属性和方法,而不需在子类重新定义。(2)子类既可以保持原有的属性和方法,也可以对从父类那里继承的属性和方法进行修改。,5.1继承,代码实例,Vehicle类:public class Vehicle String color=“white”;protected float speed;public void accelerate().Automobile类 public class Automobile extends Vehicle float fuelConsum;public void decelerate()speed=speed 10;,Vehicle类与Automobile类的属性及方法:,5.1继承,Car类:public class Car extends Automobile private int price;public void decelerate()speed=speed 20;,5.1继承,Vehicle类、Automobile类及Car类的属性及方法:,5.1继承,采用继承的方式来组织设计类,可以使程序结构更清晰并降低编码和维护的工作量。,5.2继承的使用,不就多写几行代码嘛,弄个啥继承?,/example1class ClassA int doThis()int doThat(),假设现在要设计一个类ClassB,其中需要有ClassA里的doThis(),doThat(),怎么办?,/example2class ClassBclassA a=new ClassA();int doThis()return a.doThis();int doThat()return a.doThis();,5.2继承的使用,/example1class ClassA int doThis()int doThat(),5.2.1 属性和方法的继承,1.属性的继承(1)子类可以继承父类的所有非私有属性,/example1class Person String name;int age;,/example1class Student String name;int age;String dept;,1.属性的继承,两个类有大量重复定义,可以怎么更改?,/example2class Person String name;int age;class Student extends Person String dept;,(2)属性的覆盖:子类可重新定义父类的非私有属性,1.属性的继承,注意:1.子类此时将有两个同名属性,一个是继承自父类的,一个是自定义的2.当子类执行继承自父类的方法时,处理的是继承自父类的属性3.当子类执行自定义的方法时,处理的是自定义的属性4.可以使用关键字super来实现父类属性的直接应用,1.属性的继承之属性的覆盖,public class Father int a=100;public void miner()a-;public static void main(String args)Father x=new Father();Son y=new Son();System.out.println(a of son is:+y.a);System.out.println(a of sons super is:+y.getA();y.miner();System.out.println(a of son is:+y.a);System.out.println(a of sons super is:+y.getA();,class Son extends Father int a=1;public void plus()a+;public int getA()return super.a;,1.属性的继承之属性的覆盖,2.方法的继承方法的继承规则与属性类似,主要有如下几点:1)子类可继承父类的所有非私有方法;2)不能继承父类的构造方法;3)如果子类方法与父类方法同名(不同参),则子类重载父类方法;4)如果子类方法与父类方法同名同参,则子类覆盖(重写)父类方法,若要引用父类的方法,用关键字super;5)覆盖方法不能使用比被覆盖方法更严格的访问权限。,5.2.1 属性和方法的继承,方法的重载与覆盖有何区别?1)覆盖是子类和父类间的关系,重载是同一类内部多个方法的关系;2)覆盖一般是两个方法间,而重载可能是多个方法间;3)覆盖的方法有相同方法名和形参表,而重载仅方法名相同;4)覆盖时区分方法的是调用它的对象,而重载根据形参表决定调用哪个方法。,2.方法的继承之重载与覆盖,class Person String name;int age;void set(String s,int i)name=s;age=i;public void print()System.out.println(name+,+age);,2.方法的继承例,2.方法的继承例,public class Student extends Person protected String dept;public static void main(String args)Person p=new Person();p.set(Richard,23);p.print();Student s=new Student();s.set(Drodan,34);s.dept=computer;s.print();,注意:由final修饰的方法是不能被子类覆盖的,只能被重载!,2.方法的继承之final,class Fatherpublic final void mathod()System.out.print(the fathers mathod);,class Son extends Father public void mathod(int i)/如果没有形参i,就和/父类方法相同super.mathod();System.out.println(the sons mathod+i);,2.方法的继承之final,构造函数的作用?定义对象的初始状态!JAVA的几种初始化机制1)默认变量初始化如果没有明确为某个变量赋值,那么系统会自动赋值:数字0;布尔型false;引用型null;2)默认构造函数 public Employee()name=“”;salary=0;,2.方法的继承之构造函数,3)显式变量初始化 private String name=“lili”;/显式初始化4)带参数构造函数public Employee(String n,double s)name=n;salary=s;,2.方法的继承之构造函数,当所有构造函数都需要把某一变量都赋于相同值时,5)构造函数里调用本类已定义构造函数,2.方法的继承之构造函数,class Person String name;int age;Person(String n)name=n;Person(String n,int a)this(n);/调用第一个构造函数 age=a;,6)子类构造函数里调用父类定义的构造函数,2.方法的继承之构造函数,class Student extends Person int sid;Student(String n,int a,int id)super(n,a);/必须是第一条语句 sid=id;,子类并不继承父类的构造函数,但子类构造函数与父类构造函数存在如下原则:1)如果子类没有定义任何构造函数,那么在创建子类对象时将调用父类无参数的构造函数2)若子类自已定义了构造函数,则在创建子类对象时,系统将先隐含执行父类无参数的构造函数,后执行自己的构造函数3)若子类定义的构造函数中,利用super关键字显式调用父类构造函数,系统将不再隐含调用父类的无参数的构造函数,2.方法的继承之构造函数,关于第一条原则:,2.方法的继承之构造函数,class Father Father()System.out.println(这是父类的构造函数);,public class Son extends Father public static void main(String s)Son a=new Son();,关于第二条原则:,2.方法的继承之构造函数,public class Son extends Father Son()System.out.println(这是子类的构造函数);public static void main(String s)Son a=new Son();,关于第三条原则:,2.方法的继承之构造函数,class FatherFather()System.out.println(这是父类的构造函数);Father(int a)System.out.println(这是父类的构造函数+a);,2.方法的继承之构造函数,public class Son extends Father Son()super(2);System.out.println(这是子类的构造函数);public static void main(String s)Son a=new Son();,2.方法的继承之综合实例,class Fatherprivate String s=Father;public void append(String a)s+=a;/字符串相加再赋予原串 public void dilute()append(dilute();public void apply()append(apply();public void scrub()append(scrub();public void print()System.out.println(s);,public class Son extends Fatherpublic void scrub()/覆盖父类的方法 append(Son.scrub();super.scrub();public void foam()/自己定义的方法 append(foam();public static void main(String args)Son x=new Son();System.out.println(sub class has:);x.dilute();x.apply();x.scrub();x.foam();x.print();,5.3 如何防止继承,把关键字final作为方法的修饰符,该方法不能被覆盖,只能重载。那么把final作为类的修饰符呢?,1.由final修饰的类是最终类,不能被继承,该类处于继承树的叶子,不能再有子类2.一个类被声明为final类,则其所有方法都默认为final型,不包括变量,public class Son extends Father public static void main(String s)Son a=new Son();final class Father/final不能被继承,5.3 如何防止继承,把一个类或方法设置为final的原因:1)效率。执行效率较高2)安全。用户不能完全控制调用一个方法时所发生的一切,5.3 如何防止继承,概念:指在一棵继承树中的类中可以有多个同名但不同方法体及不同形参的方法。多态的两种情况:覆盖与重载1)覆盖:即子类与父类方法的名称、形参与返回值都相同,但内部处理不同(子类重新编写了方法体)2)重载:同一个类中定义有多个同名方法,但有不同形参,不同方法体,5.3 多态,覆盖是一种比较简单的多态,它是扩大对象灵活性的一种有效手段,1.多态之覆盖,public class A public String toString()return“类名A”;,public class B extend A public String toString()return“类名B”;,重载包括普通方法重载与构造函数重载,2.多态之重载,class Computepublic calNum(int a,int b)public calNum(float a,float b)public calNum(double a,double b),用途:把一个对象引用从一个类转换到另一个类。,5.3 强制类型转换,有什么意义?子类是对父类的一个改进和扩充,所以一般子类在功能上较父类更强大,属性较父类更独特,定义一个父类类型的引用指向一个子类的对象既可以使用子类强大的功能,又可以抽取父类的共性,5.3 强制类型转换,1.父类类型的引用可以调用父类中定义的所有属性和方法,而对于子类中定义而父类中没有的方法,它是无法访问的;2.父类中的一个方法只有在在父类中定义而在子类中没有重写的情况下,才可以被父类类型的引用调用;3.对于父类中定义的方法,如果子类中重写了该方法,那么父类类型的引用将会调用子类中的这个方法。4.被引用对象的类型而不是引用变量的类型决定了调用谁的成员方法,5.3 强制类型转换,附录,1.java 继承中普通变量、静态变量、构造函数执行顺序,class A int a=setA();int setA()System.out.println(设置a为0);return 0;A()System.out.println(构造函数);a=1;,例1,public class Testpublic static void main(String args)A a=new A();System.out.println(a.a);,例2,class C static int prt(int i)System.out.println(i);return i;class A int a=C.prt(0);static int b=C.prt(1);A()System.out.println(constructor of A);,class B extends A int c=C.prt(2);static int d=C.prt(3);B()System.out.println(constructor of B);public void test()System.out.println(begin.);,publicclassorderTest publicstaticvoidmain(Stringargs)Bb=newB();b.test();,java 继承中普通变量、静态变量、构造函数执行顺序:1、父类的静态变量;2、子类的静态变量;3、父类的普通变量、父类的构造函数;4、子类的普通变量、子类的构造函数;,

    注意事项

    本文(利用已有成果继承与多态.ppt)为本站会员(sccc)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开