Java程序设计基础与实践-电子教案-费雅洁 第4章

上传人:E**** 文档编号:89389560 上传时间:2019-05-24 格式:PPT 页数:24 大小:186KB
返回 下载 相关 举报
Java程序设计基础与实践-电子教案-费雅洁 第4章_第1页
第1页 / 共24页
Java程序设计基础与实践-电子教案-费雅洁 第4章_第2页
第2页 / 共24页
Java程序设计基础与实践-电子教案-费雅洁 第4章_第3页
第3页 / 共24页
Java程序设计基础与实践-电子教案-费雅洁 第4章_第4页
第4页 / 共24页
Java程序设计基础与实践-电子教案-费雅洁 第4章_第5页
第5页 / 共24页
点击查看更多>>
资源描述

《Java程序设计基础与实践-电子教案-费雅洁 第4章》由会员分享,可在线阅读,更多相关《Java程序设计基础与实践-电子教案-费雅洁 第4章(24页珍藏版)》请在金锄头文库上搜索。

1、Java程序设计基础与实践,主编 费雅洁 中国水利水电出版社,第4章 继承与多态,Java类间继承的实现方法 Java继承中变量与方法的隐藏和覆盖问题 this和super关键字的使用 Java多态性的含义,4.1.1 继承性 创建子类 Java中,使用关键字extends实现继承,格式如下: 类修饰符class 类名extends 父类名 implements 接口列表/类声明 继承而得到的类称为子类,被继承的类称为父类、基类或超类。Java不支持多重继承,即一个类从多个父类派生的能力。子类可以继承父类中所有可被子类访问的成员变量和成员方法。 所有的类都是通过直接或间接地继承java.lan

2、g.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 /定义Student类,继承People类 String number; /定义自己的成员变量:学号 public static void main(String args) Student s

3、=new Student(); /创建对象 s.age=20; /继承父类成员变量 s.number=“15“; /自己的成员变量 s.setName(“黎明“); /继承父类的成员方法 System.out.println(“学号:“+s.number); /输出信息 System.out.println(“姓名:“+s.getName(); System.out.println(“年龄:“+s.age); , 对象的上转型对象 上转型(Upercase)对象,即将子类实例化的对象的引用赋给用父类声明的变量。即定义了子类对象,但把这个对象的引用放到父类的对象中。 例如,假设A类是B类的父类

4、A a; A=new B(); 或 A a; B b=new B(); a=b; 称这个父类对象a是子类对象b的上转型对象。,例如: class People 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 “父类姓名:“+name+“n“+“父类年龄:“+age+“n“+“父类工号:“+number+“n“; clas

5、s Student extends People protected String name=“李四“; /变量的隐藏 protected String getInfo(String s,int a) name=s; age=a; return “子类姓名:“+name+“n“+“子类年龄:“+age+“n“; protected String getInfo(String s,int a,int n) /方法的重写 name=s; age=a; number=n; return “子类姓名:“+name+“n“+“子类年龄:“+age+“n“+“子类工号:“+number+“n“; publ

6、ic static void main(String args) People 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); ,隐藏和

7、覆盖 隐藏就是子类隐藏了父类的变量或方法,那么,子类不能访问父类被隐藏的变量或方法。 Java中变量在继承时的覆盖和隐藏规则为: 父类的实例变量和静态变量能被子类的同名变量隐藏。 局部变量和各种参数永远不会被隐藏。,class ParentClass private static String privateField = “父类变量-private“; /* friendly */String friendlyField = “父类变量-friendly“; protected static String protectedField = “父类变量-protected static“; p

8、rotected String publicField = “父类变量-public“; public String getPrivateFieldValue() return privateField; public class SubClass extends ParentClass private String privateField = “子类变量-private“; /* friendly */String friendlyField = “子类变量-friendly“; protected static String protectedField = “子类变量-protecte

9、d static“; public String publicField = “子类变量-public“; public String getPrivateFieldValue() /System.out.println(super.publicField); return privateField; ,public static void main(String args) / 输出下列三种情况中变量的值 / ParentClass类型,ParentClass对象 ParentClass parentClass = new ParentClass(); System.out.println(

10、“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类型,SubClass对象 ,上转型对象

11、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.print

12、ln(); / 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.public

13、Field); , 方法的隐藏和覆盖,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的getKind()方法被调用了“); return kind; /静态方法,返回年龄 public static int getAge() System.out.prin

14、tln(“Parent的getAge()方法被调用了“); return age; /实例方法,返回姓名 public String getName() 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 stati

15、c String getKind() System.out.println(“child的getkind()方法被调用了“); return kind; /获取父类包名 public static String getParentKind() return Parent.kind; /覆盖父类实例方法 public String getName() System.out.println(“child的getName()被调用了“); return this.name; /获取父类名称 public String getParentName() return super.name; /* *错误,实例方法不能覆盖父类的静态方法 public int getAge() return age; */ ,public class methodExtend public static void main(String args) Child child=new Child(); System.out.println(“子类名称:%s,年龄:%d,包名:%s%n“+child.name+child.age+child.kind); /输出:子类名称:child,年龄:25,包:javastudy.extends

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号