预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共23页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

第4章继承与多态Java类间继承的实现方法 Java继承中变量与方法的隐藏和覆盖问题 this和super关键字的使用 Java多态性的含义4.1.1继承性 ⑴创建子类 Java中,使用关键字extends实现继承,格式如下: [类修饰符]class类名extends父类名[implements接口列表]{//类声明 } 继承而得到的类称为子类,被继承的类称为父类、基类或超类。Java不支持多重继承,即一个类从多个父类派生的能力。子类可以继承父类中所有可被子类访问的成员变量和成员方法。 所有的类都是通过直接或间接地继承java.lang.Object类得到的。例如: classPeople{ Stringid,name; intage; People(){ id="00000"; name=null; age=0; } voidsetName(Stringname){ this.name=name; } StringgetName(){ returnname; } } publicclassStudentextendsPeople{//定义Student类,继承People类 Stringnumber;//定义自己的成员变量:学号 publicstaticvoidmain(Stringargs[]){ Students=newStudent();//创建对象 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类的父类 Aa; A=newB(); 或 Aa; Bb=newB(); a=b; 称这个父类对象a是子类对象b的上转型对象。例如: classPeople{ protectedStringname="张三"; protectedintage,number; StringgetName(){ returnname; } protectedStringgetInfo(Strings,inta,intn){ name=s; age=a; number=n; return"父类姓名:"+name+"\n"+"父类年龄:"+age+"\n"+"父类工号:"+number+"\n"; } } classStudentextendsPeople{ protectedStringname="李四";//变量的隐藏 protectedStringgetInfo(Strings,inta){ name=s; age=a; return"子类姓名:"+name+"\n"+"子类年龄:"+age+"\n"; } protectedStringgetInfo(Strings,inta,intn){//方法的重写 name=s; age=a; number=n; return"子类姓名:"+name+"\n"+"子类年龄:"+age+"\n"+"子类工号:"+number+"\n"; } publicstaticvoidmain(Stringargs[]){ Peoplep=newStudent();//p为上转型对象 //System.out.println(p.getInfo(p.getName(),20));//非法,上转型对象不可以访问子类新增成员 System.out.println(p.getInfo(p.getName(),40,10000)); //访问子类重写的方法,隐藏的变量 Students=(Student)p;//强制转换为子类对象,可以访问自了新增的成员方法 System.out.println(s.getInfo(s.getName(),20)); } }隐藏和覆盖 隐藏就是子类隐藏了父类的变量或方法,那么,子类不能访问父类被隐藏的变量或方法。 Java中变量在继承时的覆盖和隐藏规则为: 父类的实例变量和静态变量能被子类的同名变量隐藏。 局部变量和各种参数永远不会被隐藏。 classParentClass{ privatestaticStringprivateField="父类变量--private"; /*