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

    java教程-子类与继承.ppt

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

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

    java教程-子类与继承.ppt

    5.子类与继承,主讲:王华彬,面向对象的特性,继承性,狮子拥有动物的一切基本特性,但同时又拥有自己的独特的特性,这就是“继承”关系的重要性质。,Animal,Lion,子类继承父类的非私有的基本属性和方法,同时又能创建属于自己的属性的方法。,创建子类,通过在类的声明中加入extends子句来创建一个类的子类:class SubClass extends SuperClass,Java技术及其应用,创建子类,class Animal动物基本属性和方法;属性:体重、高度、腿的数量;方法:进食、消化、排泄;class Lion extends Animal 自动拥有动物类中允许继承的属性和方法;还可添加狮子特有的属性和方法;比如:毛发颜色、性别、凶猛程度;咆哮、捕猎、睡觉;,Java技术及其应用,我们先认识一下类的“祖先”,即所有类的根类;想象一下,什么是类的祖先?public class Aclass maintestpublic static void main(String args)A a;,默认继承类,类:所有类的祖先class A相当于class A extends 如果缺省extends子句,则该类为的子类。,Java技术及其应用,类,它处于Java开发环境的类层次树的根部,其他所有的类都直接或间接地为它的子类。该类定义了一些所有对象最基本的状态和行为,例如:equals()判断两个对象引用是否相同,等价于=getClass()返回一个对象在运行时所对应的类的表示,从而可以得到相应的信息。toString()返回对象的字符串表示。,Java技术及其应用,class T1 public class Test1 public static void main(String args)T1 t1=new T1();T1 t2=new T1();t2=t1;boolean b;b=t1.equals(t2);System.out.println(b);,接下来,分析一下多重继承和多层继承,面向对象特性继承性,Java中支持单继承。思考:为什么取消多重继承?,动物,水栖生活动物,陆栖生活动物,水陆两栖动物,动物类,马类,驴类,骡子类,优点:继承二者优点,缺点?,为什么取消多重继承?,鱼类,鲫鱼类,家猪类,猪类,面向对象特性继承性,Java中不支持多重继承。Java中支持多层继承。再思考一下继承的作用?,1、提高代码复用度,减少代码;2、方便扩展,在以前的基础上进行改进3、总之,取其精华、引入创新,本章学习内容,1、子类继承父类的属性和方法2、父类的属性和方法不够用怎么办?研究:子类增加新的属性和方法3、父类如果想保留某些属性和方法怎么办?研究:父类设定某些属性和方法不允许继承 4、父类的某些属性和方法,不太适合子类怎么办?研究:子类修改父类的属性和方法 5、父类不想被继承怎么办?研究:为了保密性,类可设置为不允许继承6、父类允许被继承,但是不想被修改属性和方法怎么办?父类的某些属性和方法允许继承,但是不允许子类修改;,子类的继承性,若子类和父类在同一个包内,子类可以继承父类中访问权限设定为public、protected、default的成员变量和方法。若子类和父类不在同一个包内,子类可以继承父类中访问权限设定为public、protected的成员变量和方法。,例题 正常继承,class Aint x;void setX(int x)this.x=x;int getX()return x;,Java技术及其应用,class B extends Adouble y=12;void setY(int y)this.y=y+x;double getY()return y;,例题 私有继承,class Aprivate int x;void setX(int x)this.x=x;int getX()return x;,Java技术及其应用,class B extends Adouble y=12;void setY(int y)this.y=y+x;double getY()return y;,子类的继承性,Java技术及其应用,子类对象引用,class A private int x=10;protected double y=12.56;void f()y=y+x;System.out.printf(x=%d,y=%fn,x,y);class B extends A double z=12;void g()z=y+100;System.out.printf(z=%fn,z);class Example public static void main(String args)B b=new B();b.f();/调用从父类继承的方法。B类本没有该方法 b.g();/调用子类自己声明的方法。,练习一,Java技术及其应用,class Aprivate int x;int y;protected int z;,class B extends Avoid f()x=1;void g()y=1;void h()z=1;,指出程序中的错误?,练习二,Java技术及其应用,package p1;class Aprivate int x;int y;protected int z;,package p2;class B extends Avoid f()x=1;void g()y=1;void h()z=1;,public,import p1.A;,指出程序中的错误?,知识点小结,1、只有public类,才能被另一个包中的类继承;2、引入另一个包中的public类,需要用import3、private类型的属性或方法不能被继承4、public类型的属性或方法一定可以被继承5、defalut 和 protected类型呢?,本章学习内容,1、子类继承父类的属性和方法2、父类的属性和方法不够用怎么办?研究:子类增加新的属性和方法3、父类如果想保留某些属性和方法怎么办?研究:父类设定某些属性和方法不允许继承 4、父类的某些属性和方法,不太适合子类怎么办?研究:子类修改父类的属性和方法 5、父类不想被继承怎么办?研究:为了保密性,类可设置为不允许继承6、父类允许被继承,但是不想被修改属性和方法怎么办?父类的某些属性和方法允许继承,但是不允许子类修改;,如何修改父类的方法?通过方法重写实现!思考:方法的重载是什么?和重写的区别?,同名!,class Aint x;void setX(int x),Java技术及其应用,class B extends Aint x;/隐藏父类中的变量xvoid setX(int x)/重写父类中的方法setX(),重写的方法必须与父类中的方法名字相同、参数个数和类型相同,返回类型相同或是子类。,class Afloat computer(float x,float y)return x+y;public int g(int x,int y)return x+y;class B extends Afloat computer(float x,float y)return x*y;,Java技术及其应用,B b=new B();puter(8,9);b.g(12,8);,class AA g()return new A();A f()return new A();class B extends AB f()return new B();,Java技术及其应用,B b=new B();b.f();b.g();,返回值是子类,思考1:下程序是否是重写?,class Afloat computer(float x,float y)return x+y;public int g(int x,int y)return x+y;class B extends Adouble computer(float x,float y)return x*y;,思考2:下程序是否是重写?,class A public int f(int x,int y)return x+y;class B extends A public int f(int x,int y,int z)return x*y;,思考3:重写时方法的权限管理,重写父类的方法时,不可以降低方法的访问权限class Aprotected float f(float x,float y)return x-y;class B extends Afloat f(float x,float y)return x+y;,Java技术及其应用,public float f(float x,float y),知识点小结,方法重写与方法重载的区别方法重写:子类方法与父类方法同名,且参数个数类型一致,返回类型相同或子类。方法重载:方法名相同,参数个数或类型不同,返回类型相同,Java技术及其应用,如果在子类中定义一个和父类一样的属性,则父类的属性被隐藏;如果在子类中重写了父类的方法,则父类方法被隐藏;如果在子类中需要调用被隐藏的属性或方法,怎么办呢?思考:在类和对象章节中,成员变量被局部变量和参数变量隐藏时,怎么处理?,引用父类成员,Java中通过super来实现对父类成员的访问。1.访问父类被隐藏的成员变量,如:super.variable2.调用父类中被重写的方法,如:super.Method(paramlist);3.调用父类的构造函数,如:super(paramlist);,分析程序的问题?,class A double f(double x,double y)return x+y;class B extends A double f(double x,double y)double m=f(x,y);return m+x*y;class cpublic static void main(String args)B b=new B();System.out.println(b.f(10.0,8.0);,分析程序的问题?,class A double f(double x,double y)return x+y;class B extends A double f(double x,double y)double m=super.f(x,y);return m+x*y;class cpublic static void main(String args)B b=new B();System.out.println(b.f(10.0,8.0);,既然子类继承了父类的部分属性和变量,在创建子类对象时,直接调用子类的构造函数。此时,并没有显式的调用父类的构造函数,而子类对象却能调用父类的属性和方法,思考为什么?当创建一个子类对象时,总是先调用父类的构造方法,再调用子类的构造方法。,class Grandparent public Grandparent()System.out.println(GrandParent Created.);class Parent extends Grandparent public Parent()System.out.println(Parent Created);class Child extends Parent public Child()System.out.println(Child Created);,Java技术及其应用,Child c=new Child();,思考:父类有多个构造方法,子类创建对象时调用哪个呢?,class Grandparent public Grandparent()System.out.println(GrandParent Created.);public Grandparent(int i)System.out.println(GrandParent Created2.);class Child extends Grandparent public Child()System.out.println(Child Created);,Java技术及其应用,Child c=new Child();,思考:父类有多个构造方法,默认调用的是没有参数的构造方法,如果想调用其他的构造方法怎么办呢?能否在子类的构造函数中,直接调用父类的构造函数呢?,class Grandparent public Grandparent()System.out.println(GrandParent Created.);public Grandparent(int i)System.out.println(GrandParent Created2.);class Child extends Grandparent public Child()Grandparent(1);System.out.println(Child Created);,Java技术及其应用,Child c=new Child();,思考:意味着什么?,可知:通常情况下,子类不继承父类的构造方法。怎样调用父类的构造方法呢?super()函数,class Grandparent public Grandparent()System.out.println(GrandParent Created.);public Grandparent(int i)System.out.println(GrandParent Created2.);class Child extends Grandparent public Child()super(1);System.out.println(Child Created);,Java技术及其应用,Child c=new Child();,注意:Super()函数,必须在子类构造函数的第一行使用,class Grandparent public Grandparent()System.out.println(GrandParent Created.);public Grandparent(int i)System.out.println(GrandParent Created2.);class Child extends Grandparent public Child()System.out.println(Child Created);super(1);,Java技术及其应用,Child c=new Child();,子类的构造方法小结,当创建一个子类对象时,总是先调用父类的构造方法,再调用子类的构造方法。如果子类的构造方法没有显示的调用父类的构造方法super(),则默认先调用父类的不带参数的那个构造方法。通常情况下,子类不继承父类的构造方法。,Java技术及其应用,Java多态性,静态多态性(编译)方法重载方法名相同,根据参数个数或类型不同,在编译阶段决定执行不同的方法。动态多态性(运行)方法重写方法名相同,参数相同,在运行阶段决定执行不同的方法。,动态多态性实现的前提条件,将子类的对象的引用放到父类的对象中。例如:A类为父类,B类为子类。A a=new B();称a是new B()生成的对象的上转型对象。,a,new B(),class Avoid callme()System.out.println(A);class B extends Avoid callme()System.out.println(B);class C extends Avoid callme()System.out.println(C);,Java技术及其应用,A a=new A();a.callme();a=new B();a.callme();a=new C();a.callme();思考:a.callme 调用哪个?,重写方法的调用,a.callme();动态多态性A a;a=new B();a=new C();a.callme();对于重写的方法,Java运行时系统根据调用该方法的实例的类型来决定选择哪个方法调用。,class EspecialCarvoid cautionSound()class PoliceCar extends EspecialCarvoid cautionSound()System.out.println(111);class AmbulanceCar extends EspecialCarvoid cautionSound()System.out.println(222);,Java技术及其应用,EspecialCar car=new PoliceCar();car.cautionSound();car=new AmbulanceCar();car.cautionSound();,void f(),car.f();,小结,多态性方法重载方法重写子类对象引用赋值给父类对象,此父类对象称为上转型对象。上转型对象可以引用继承的变量和重写的方法,不可以引用子类新增的变量和方法。,Java技术及其应用,本章学习内容,1、子类继承父类的属性和方法2、父类的属性和方法不够用怎么办?研究:子类增加新的属性和方法3、父类如果想保留某些属性和方法怎么办?研究:父类设定某些属性和方法不允许继承 4、父类的某些属性和方法,不太适合子类怎么办?研究:子类修改父类的属性和方法 5、父类不想被继承怎么办?研究:为了保密性,类可设置为不允许继承6、父类允许被继承,但是不想被修改属性和方法怎么办?父类的某些属性和方法允许继承,但是不允许子类修改;,final关键字,final 修饰变量,变量就变成了常量;final 修饰方法,方法就不能再重写;final 修饰类,类就不能再继承。例如:Java中的String类,对编译器和解释器的正常运行有很重要的作用,不能轻易改变它,因此把它修饰为final类,使他不能被继承,保证String类型的唯一性,final 修饰类,final class EspecialCarclass PoliceCar extends EspecialCar,final 修饰方法,方法就不能再重写,class EspecialCarfinal void cautionSound()System.out.println(111);class PoliceCar extends EspecialCarvoid cautionSound()System.out.println(222);,final 修饰变量,变量就变成了常量,class EspecialCarfinal int test;void cautionSound()System.out.println(111);,小结,Final 关键字作用:final 修饰变量,变量就变成了常量;final 修饰方法,方法就不能再重写;final 修饰类,类就不能再继承。,小结,1、子类继承父类的属性和方法2、父类的属性和方法不够用怎么办?研究:子类增加新的属性和方法3、父类如果想保留某些属性和方法怎么办?研究:父类设定某些属性和方法不允许继承 4、父类的某些属性和方法,不太适合子类怎么办?研究:子类修改父类的属性和方法 5、父类不想被继承怎么办?研究:为了保密性,类可设置为不允许继承6、父类允许被继承,但是不想被修改属性和方法怎么办?父类的某些属性和方法允许继承,但是不允许子类修改;,思考:在设计父类时,有些方法可能不容易定义,比如:银行类:包含一个方法:计算利息;由于各家银行计算利息的方法不同,因此,在设计银行类时,无法确定计算利息的方法;能否在设计银行类时,只声明该方法,不写实现,然后在设计银行子类时,根据具体银行,对父类的“计算利息”方法进行重写?,abstract类,abstract修饰类,抽象类;abstract class 类名成员变量;成员方法;(abstract方法或非abstract方法)抽象类必须被继承不能由抽象类声明对象;,Java技术及其应用,abstract方法,abstract修饰方法,抽象方法;abstract 成员方法();抽象方法只需声明,无需实现。抽象方法必须被重写。,Java技术及其应用,抽象类(abstract class),抽象类中可以包含抽象方法,为所有子类定义一个统一的接口,但并不是必须的;一旦某个类中包含抽象方法,则这个类必须声明为抽象类,abstract class Aabstract void callme();void metoo()System.out.println(Inside As metoo()method);class B extends Avoid callme()System.out.println(Inside Bs callme()method);B a=new B();a.callme();a.metoo();,面向抽象编程,abstract类只关心操作,不关心操作具体实现细节,可以使程序员把精力集中在程序的设计上,而不必拘泥于细节的实现。即:设计者只需设计好方法,而具体方法实现由子类的设计者实现。面向抽象编程:当设计一个类时,不让该类面向具体的类,而是面向抽象类。核心思想:将abstract类声明的对象作为其子类的上转型对象,利用它调用子类重写的方法。,Java技术及其应用,面向抽象编程举例,class Circle double radius;/圆的半径 double getArea()return 3.1415926*radius*radius;,Java技术及其应用,面向抽象编程举例,class PillarCircle bottom;double height;public double getVolume()return bottom.getArea()*height;,Java技术及其应用,只能求圆柱体,面向抽象编程举例,class PillarGeometry bottom;double height;public double getVolume()return bottom.getArea()*height;abstract class Geometrypublic abstract double getArea();,Java技术及其应用,面向抽象编程举例,class Circle extends Geometry double radius;/圆的半径 double getArea()return 3.1415926*radius*radius;class Rectangle extends Geometrydouble a,b;double getArea()return a*b;,Java技术及其应用,面向抽象编程举例,Pillar pillar;Geometry bottom;bottom=new Rectangle();pillar=new Pillar(bottom,58);bottom=new Circle();pillar=new Pillar(bottom,58);,Java技术及其应用,例题5-13,public abstract class Animal public abstract void cry();public abstract String getAnimalName();public class Simulator public void playSound(Animal animal)(现在播放+animal.getAnimalName()+类的声音:);animal.cry();,Java技术及其应用,例题5-13,public class Dog extends Animal public void cry()(汪汪.汪汪);public String getAnimalName()return 狗;,Java技术及其应用,例题5-13,public class Cat extends Animal public void cry()(喵喵.喵喵);public String getAnimalName()return 猫;,Java技术及其应用,例题5-13,public class Application public static void main(String args)Simulator simulator=new Simulator();simulator.playSound(new Dog();simulator.playSound(new Cat();,Java技术及其应用,例题5-13,public class Tiger extends Animal public void cry()(“吼.吼吼);public String getAnimalName()return“老虎;,Java技术及其应用,小结,当系统中增加新的模块时,不需要修改现有的模块。核心-闭扩展-开,Java技术及其应用,框架的核心部分,框架的扩展部分,Simulator,Animal,Dog,Cat,Tiger,再来一题,HardWork.java,Java技术及其应用,练习,设计一个抽象类People,具有抽象方法say();设计子类ChinaPeople,AmericaPeople,实现抽象方法say();设计一个Speak类,提供speaking()方法,以上转型对象作为参数,打印说话的内容。设计一个测试类Test,测试再增加一个子类AfricaPeople,实现抽象方法say();添加到测试类中。,Java技术及其应用,

    注意事项

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

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




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开