欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    Java程序设计基础与实践 第4章 继承与多态.ppt

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

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

    Java程序设计基础与实践 第4章 继承与多态.ppt

    第4章 继承与多态Java类间继承的实现方法Java继承中变量与方法的隐藏和覆盖问题this和super关键字的使用Java多态性的含义4.1.1 继承性 创建子类Java中,使用关键字extends实现继承,格式如下:类修饰符class 类名extends 父类名 implements 接口列表/类声明 继承而得到的类称为子类,被继承的类称为父类、基类或超类。Java不支持多重继承,即一个类从多个父类派生的能力。子类可以继承父类中所有可被子类访问的成员变量和成员方法。所有的类都是通过直接或间接地继承java.lang.Object类得到的。例如:例如:class People String id,name;int age;People()id=00000;name=null;age=0;void setName(String name)this.name=name;String getName()return name;public class Student extends People /public class Student extends People /定义定义Student类,继承类,继承People类类 String number;/String number;/定义自己的成员变量:学号定义自己的成员变量:学号 public static void main(String args)Student s=new Student();/Student s=new Student();/创建对象创建对象 s.age=20;/s.age=20;/继承父类成员变量继承父类成员变量 s.number=15;/s.number=15;/自己的成员变量自己的成员变量 s.setName(s.setName(黎明黎明);/继承父类的成员方法继承父类的成员方法 System.out.println(System.out.println(学号:学号:+s.number);/输出信息输出信息 System.out.println(System.out.println(姓名:姓名:+s.getName();System.out.println(System.out.println(年龄:年龄:+s.age);对象的上转型对象上转型(Upercase)对象,即将子类实例化的对象的引用赋给用父类声明的变量。即定义了子类对象,但把这个对象的引用放到父类的对象中。例如,假设A类是B类的父类A a;A=new B();或A a;B b=new B();a=b;称这个父类对象a是子类对象b的上转型对象。例如:例如:class Peopleprotected String name=protected String name=张三张三;protected int age,number;String getName()return name;protected String getInfo(String s,int a,int n)name=s;age=a;number=n;return return 父类姓名:父类姓名:+name+n+父类年龄:父类年龄:+age+n+父类工号:父类工号:+number+n;class Student extends Peopleprotected String name=protected String name=李四李四;/变量的隐藏变量的隐藏protected String getInfo(String s,int a)name=s;age=a;return return 子类姓名:子类姓名:+name+n+子类年龄:子类年龄:+age+n;protected String getInfo(String s,int a,int n)/protected String getInfo(String s,int a,int n)/方法的重写方法的重写name=s;age=a;number=n;return return 子类姓名:子类姓名:+name+n+子类年龄:子类年龄:+age+n+子类工号:子类工号:+number+n;public static void main(String args)People p=new Student();/pPeople p=new Student();/p为上转型对象为上转型对象/System.out.println(p.getInfo(p.getName(),20);/非法,上转型对象不可以访问子类新增成员非法,上转型对象不可以访问子类新增成员System.out.println(p.getInfo(p.getName(),40,10000);/访问子类重写的方法访问子类重写的方法,隐藏的变量隐藏的变量Student s=(Student)p;/强制转换为子类对象,可以访问自了新增的成员方法强制转换为子类对象,可以访问自了新增的成员方法System.out.println(s.getInfo(s.getName(),20);隐藏和覆盖隐藏就是子类隐藏了父类的变量或方法,那么,子类不能访问父类被隐藏的变量或方法。Java中变量在继承时的覆盖和隐藏规则为:父类的实例变量和静态变量能被子类的同名变量隐藏。局部变量和各种参数永远不会被隐藏。class ParentClass private static String privateField=private static String privateField=父类变量父类变量-private;/*friendly*/String friendlyField=/*friendly*/String friendlyField=父类变量父类变量-friendly;protected static String protectedField=protected static String protectedField=父类变量父类变量-protected static;protected String publicField=protected String publicField=父类变量父类变量-public;public String getPrivateFieldValue()return privateField;public class SubClass extends ParentClass private String privateField=private String privateField=子类变量子类变量-private;/*friendly*/String friendlyField=/*friendly*/String friendlyField=子类变量子类变量-friendly;protected static String protectedField=protected static String protectedField=子类变量子类变量-protected static;public String publicField=public String publicField=子类变量子类变量-public;public String getPrivateFieldValue()/System.out.println(super.publicField);return privateField;public static void main(String args)/输出下列三种情况中变量的值输出下列三种情况中变量的值 /ParentClass/ParentClass类型,类型,ParentClass对象对象 ParentClass parentClass=new ParentClass();System.out.println(ParentClass parentClass=new ParentClass(););System.out.println(parentClass.getPrivateFieldValue();System.out.println(parentClass.friendlyField);System.out.println(parentClass.protectedField);System.out.println(parentClass.publicField);System.out.println();/ParentClass /ParentClass类型,类型,SubClass对象对象 ,上转型对象,上转型对象 ParentClass subClass=new SubClass();System.out.println(ParentClass subClass=new SubClass(););System.out.println(subClass.getPrivateFieldValue();System.out.println(subClass.friendlyField);System.out.println(subClass.protectedField);System.out.println(subClass.publicField);System.out.println();/SubClass /SubClass类型,类型,SubClass对象对象 SubClass subClazz=new SubClass();System.out.println(SubClass subClazz=new SubClass(););System.out.println(subClazz.getPrivateFieldValue();System.out.println(subClazz.friendlyField);System.out.println(subClazz.protectedField);System.out.println(subClazz.publicField);方法的隐藏和覆盖class Parent public static String kind=javastudy.extendsstudy.parent;public static int age=50;public String name=Parent;/静态方法,返回包名静态方法,返回包名 public static String getKind()System.out.println(parent System.out.println(parent的的getKind()方法被调用了方法被调用了);return kind;/静态方法,返回年龄静态方法,返回年龄 public static int getAge()System.out.println(Parent System.out.println(Parent的的getAge()方法被调用了方法被调用了);return age;/实例方法,返回姓名实例方法,返回姓名 public String getName()System.out.println(Parent System.out.println(Parent的的getName()方法被调用了方法被调用了);return this.name;/子类子类 class Child extends Parent public static String kind=javastudy.extendsstudy.child;public int age=25;public String name=child;/隐藏父类静态方法隐藏父类静态方法 public static String getKind()System.out.println(child System.out.println(child的的getkind()方法被调用了方法被调用了);return kind;/获取父类包名获取父类包名 public static String getParentKind()return Parent.kind;/覆盖父类实例方法覆盖父类实例方法 public String getName()System.out.println(child System.out.println(child的的getName()被调用了被调用了);return this.name;/获取父类名称获取父类名称 public String getParentName()return super.name;/*错误,实例方法不能覆盖父类的静态方法错误,实例方法不能覆盖父类的静态方法 public int getAge()return age;*/public class methodExtendmethodExtend public static void main(String args)Child child=new Child();System.out.println(System.out.println(子类名称:子类名称:%s,年龄:年龄:%d,包名包名:%s%n+child.name+child.age+child.kind);/输出:子类名称:输出:子类名称:child,年龄:年龄:25,包包:javastudy.extendsstudy.child /把把child转换成转换成parent对象对象 Parent parent=child;System.out.println(System.out.println(转换后的名称转换后的名称:%s,年龄年龄:%d,包名包名:%s%n+parent.name+parent.age+parent.kind);/输出:转换后的名称输出:转换后的名称:Parent,年龄:年龄:50,包:包:javastudy.extendsstudy.parent System.out.println(System.out.println(子类访问父类被隐藏的实例变量子类访问父类被隐藏的实例变量name:%s%n+child.getParentName();/输出:子类访问父类被隐藏的实例变量输出:子类访问父类被隐藏的实例变量name:Parent System.out.println(System.out.println(子类访问父类被隐藏的静态变量子类访问父类被隐藏的静态变量kind:%s+child.getParentKind();/输出:子类访问父类被隐藏的静态变量输出:子类访问父类被隐藏的静态变量kind:javastudy.extendsstudy.parent child.getName();/输出:输出:child的的getName()被调用了被调用了 /*/*注意看这个方法,返回的还是子类的注意看这个方法,返回的还是子类的getName parent.getName();/输出:输出:child的的getName()被调用了被调用了 child.getKind();/输出:输出:child的的getkind()方法被调用了方法被调用了 parent.getKind();/输出:输出:parent的的getKind()方法被调用了方法被调用了 this和super this this指明当前对象,当一个方法引用它自己类的实例变量和方法时,每个引用前都隐含着“this”。另外,this还可以用在重载的构造方法中,用来引用其它的构造方法,一般格式是this(参数列表)。例如:例如:class People protected String name,id;protected int age;People(String name)/People(String name)/第一个构造方法第一个构造方法 this.name=name;/thisthis.name=name;/this不能省略,引用成员变量不能省略,引用成员变量 People(String name,int age)/People(String name,int age)/第二个构造方法第二个构造方法 this(name);/this(name);/调用第一个构造方法调用第一个构造方法 this.age=age;/通过构造方法初始化人类的基本信息通过构造方法初始化人类的基本信息 People(String name,int age,String id)/People(String name,int age,String id)/第三个构造方法第三个构造方法 this(name,age);/this(name,age);/调用第二个构造方法调用第二个构造方法 this.id=id;/通过方法通过方法getInfo()获取人类基本信息获取人类基本信息 protected String getInfo(String name,int age,String id)this.name=name;this.age=age;this.id=id;return return 姓名:姓名:+this.name+n+年龄:年龄:+this.age+n+工号:工号:+this.id+n;public static void main(String agrs)People p=new People(Mike,30,0001);/People p=new People(Mike,30,0001);/调用第三个构造方法调用第三个构造方法 String str=String str=姓名:姓名:+p.name+n+年龄:年龄:+p.age+n+工号:工号:+p.id+n;System.out.println(str);System.out.println(p.getInfo(Mike,30,0001);/System.out.println(p.getInfo(Mike,30,0001);/通过方法通过方法getInfo()获取人类基本信息获取人类基本信息 supersuper关键字的作用是用于子类引用父类的成员,如变量、方法或者构造方法。使用的格式是“super.成员名”此外,使用super(参数列表)就可以调用父类的构造方法了,如果父类中有多个构造方法,系统将自动根据super中的参数个数和参数类型来匹配父类中的构造方法。例如:例如:class People protected String name,id;protected int age;People(String name,int age,String id)this.name=name;this.age=age;this.id=id;protected String getInfo(String name,int age,String id)this.name=name;this.age=age;this.id=id;return return 父类姓名:父类姓名:+name+n+父类年龄:父类年龄:+age+n+父类工号:父类工号:+id+n;class Student extends People Student(String name,int age,String id)super(name,age,id);/super(name,age,id);/调用父类的构造方法调用父类的构造方法 public String getInfo(String name,int age,String id)/public String getInfo(String name,int age,String id)/方法方法的重写的重写 this.name=name;this.age=age;this.id=id;return return 子类姓名:子类姓名:+name+n+子类年龄:子类年龄:+age+n+子子类工号:类工号:+id+n;String getSuperInfo()/调用父类方法调用父类方法getInfo()return super.getInfo(name,age,id);public static void main(String args)People p=new People(Mike,30,0001);Student s=new Student(John,20,15);System.out.println(p.getInfo(p.name,p.age,p.id);System.out.println(s.getInfo(s.name,s.age,s.id);System.out.println(s.getSuperInfo();构造方法的继承父类中的构造方法也可以被子类继承,使用时应当遵循以下原则:子类可以在自己的构造方法中使用super(形式参数表)来调用父类的构造方法。使用this(形式参数表)来调用本类的构造方法。如果调用父类的构造方法,则必须写在子类构造方法的第一行。如果子类的构造方法中没有显式的调用父类的构造方法,则系统默认调用父类的无参数构造方法。如果子类构造方法中既没有显式的调用父类的构造方法,而父类中又没有无参的构造方法,则编译出错。例如:例如:class AnimalAnimal()System.out.println(System.out.println(动物不会说话动物不会说话!);class Person extends AnimalString str;Person(String str)/隐含调用父类的无参构造方法隐含调用父类的无参构造方法Animal()this.str=str;System.out.println(System.out.println(人类使用人类使用+str+交流。交流。);Person()/隐含调用父类的无参构造方法隐含调用父类的无参构造方法Animal()this(this(语言语言);class Chinese extends PersonString s;Chinese(String s)super(super(肢体动作肢体动作);/显式调用父类的构造方法显式调用父类的构造方法Person(String str)this.s=s;System.out.println(System.out.println(中国人的语言是中国人的语言是+s+。);Chinese()/隐含调用父类的无参构造方法隐含调用父类的无参构造方法Person()System.out.println(System.out.println(中国人最棒!中国人最棒!);public static void main(String args)Chinese t1=new Chinese(Chinese t1=new Chinese(汉语汉语);/调用的构造方法为调用的构造方法为Chinese(String s)Chinese t2=new Chinese();/调用的构造方法为调用的构造方法为Chinese()4.1.2 多态性Java中多态性的实现是指程序运行时动态绑定调用的方法,换句话说,具有多态性的方法名称是相同的,但是它们会以不同数量、不同类型的参数来进行区分,运行时根据调用方法的参数和类型来动态决定绑定哪个方法。例如:例如:public class People/定义一个基类定义一个基类 String name;int age;public String getName()return People:+name;public void setName(String name)this.name=name;/定义两个派生类定义两个派生类class Teacher extends People String id;public Teacher(String id,int age)this.id=id;this.age=age;public String getName()return Teacher:+name;class Student extends People String number;public Student(String number,int age)this.number=number;this.age=age;public String getName()return Student:+name;/测试输出结果的类测试输出结果的类class ShowInfo public static void main(String args)People p;Teacher t=new Teacher(0001,40);Student s=new Student(15,20);p=t;/p=t;/上转型对象上转型对象 p.setName(Mike);System.out.print(t.id+,);System.out.print(p.getName()+,);System.out.println(p.age);p=s;p.setName(John);System.out.print(s.number+,);System.out.print(p.getName()+,);System.out.println(p.age);

    注意事项

    本文(Java程序设计基础与实践 第4章 继承与多态.ppt)为本站会员(s****8)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

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




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开