java教程--子类与继承

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Java技术及其应用
class A{ A g(){ return new A(); } A f(){ return new A(); } } class B extends A{ B f(){ return new B(); } }
返回值是子类
A:
g()
f() B:
继承的g()
重写的f ()
B b=new B(); b.f(); b.g();
思考3:重写时方法的权限管理
重写父类的方法时,不可以降低方法的访问权限 class A{ protected float f(float x,float y){ return x-y; } } class B extends A{ float f(float x,float y){ public float f(float x,float y) } return x+y; } } Java技术及其应用
如果在子类中需要调用被隐藏的属性或方法,怎 么办呢? 思考:在类和对象章节中,成员变量被局部变量 和参数变量隐藏时,怎么处理?
引用父类成员
Java中通过super来实现对父类成员的访问。 1. 访问父类被隐藏的成员变量,如: super.variable 2. 调用父类中被重写的方法,如: super.Method ( [paramlist] ); 3. 调用父类的构造函数,如: super( [paramlist] );
知识点小结
方法重写与方法重载的区别 方法重写:子类方法与父类方法同名,且参数 个数类型一致,返回类型相同或子类。 方法重载:方法名相同,参数个数或类型不同 ,返回类型相同
Java技术及其应用
如果在子类中定义一个和父类一样的属性,则父 类的属性被隐藏; 如果在子类中重写了父类的方法,则父类方法被 隐藏;
java.lang.Object类: 所有类的祖先 class A{ } 相当于 class A extends java.lang.Object{ } 如果缺省extends子句,则该类为java.lang.Object 的子类。
Java技术及其应用
java.lang.Object类
它处于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); } }
分析程序的问题?
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 c{ public static void main(String args[]) { B b=new B(); System.out.println(b.f(10.0,8.0)); }}
安徽大学
5.子类与继承
主讲:王华彬
面向对象的特性
继承性
Animal Lion
狮子拥有动物的一切基本特性,但同时又拥 有自己的独特的特性,这就是“继承”关系 的重要性质。 父类 子类
子类继承父类的非私有的基本属性和方法, 同时又能创建属于自己的属性的方法。
创建子类
通过在类的声明中加入extends子句来创建一个 类的子类: class SubClass extends SuperClass { }
Java技术及其应用
例题 私有继承
class A{ private int x; void setX(int x){ this.x=x; } int getX(){ return x; } } class B extends A{ double y=12; void setY(int y){ this.y=y+x; } double getY(){ return y; } }
Java技术及其应用
思考1:下程序是否是重写?
class A{ float computer(float x,float y){ return x+y; } public int g(int x,int y){ return x+y; } } class B extends A{ double computer(float x,float y){ return x*y; } }
如何修改父类的方法?通过方法重写实现! 思考:方法的重载是什么?和重写的区别?
同名!
class A{ int x; void setX(int x){ … } } class B extends A{ int x;
//隐藏父类中的变量x
void setX(int x){ … }
//重写父类中的方法setX()
Java技术及其应用
}
我们先认识一下类的“祖先”,即所有类的根类 ; 想象一下,什么是类的祖先? public class A{ } class maintest{ public static void main(String args[]) { A a; } }
默认继承类
Java技术及其应用
子类的继承性
从父类未继承的成员 从父类继承的成员
子类对象引用
子类特有的成员
Java技术及其应用

class A{ private int x=10; protected double y=12.56; void f() { y=y+x; System.out.printf("x=%d,y=%f\n",x,y); } } class B extends A{ double z=12; void g() { z=y+100; System.out.printf("z=%f\n",z); } } class Example{ public static void main(String args[]) { B b=new B(); b.f(); //调用从父类继承的方法。B类本没有该方法 b.g(); //调用子类自己声明的方法。 }
练来自百度文库一
class A{ private int x; int y; protected int z; } class B extends A{ void f(){ x=1; } void g(){ y=1; } void h(){ z=1; } } Java技术及其应用
指出程序中的错误?
练习二
package p1; class A{ private int x; int y; protected int z; } 指出程序中的错误?
Java技术及其应用
创建子类
class Animal{ 动物基本属性和方法; 属性:体重、高度、腿的数量; 方法:进食、消化、排泄; } class Lion extends Animal { 自动拥有动物类中允许继承的属性和方法; 继承的属性 和方法 还可添加狮子特有的属性和方法; 比如:毛发颜色、性别、凶猛程度; 咆哮、捕猎、睡觉; 新增的属性 和方法
}
重写的方法必须与父类中的方法名字相同、 参数个数和类型相同,返回类型相同或是 子类。 Java技术及其应用
class A{ float computer(float x,float y){ return x+y; A: computer() } g() public int g(int x,int y){ B: return x+y; 继承的g() 重写的computer() } } B b=new B(); class B extends A{ b.computer(8,9); float computer(float x,float y){ b.g(12,8); return x*y; }
子类的继承性
若子类和父类在同一个包内,子类可以继承父类中 访问权限设定为public、 protected、 default的成 员变量和方法。 若子类和父类不在同一个包内,子类可以继承父类 中访问权限设定为public、 protected的成员变量 和方法。
例题 正常继承
class A{ int x; void setX(int x){ this.x=x; } int getX(){ return x; } } class B extends A{ double y=12; void setY(int y){ this.y=y+x; } double getY(){ return y; } }
分析程序的问题?
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 c{ public static void main(String args[]) { B b=new B(); System.out.println(b.f(10.0,8.0)); }}
Java中支持多层继承。
再思考一下继承的作用?
1、提高代码复用度,减少代码; 2、方便扩展,在以前的基础上进行改进 3、总之,取其精华、引入创新
本章学习内容
1、子类继承父类的属性和方法 2、父类的属性和方法不够用怎么办? 研究:子类增加新的属性和方法 3、父类如果想保留某些属性和方法怎么办? 研究:父类设定某些属性和方法不允许继承 4、父类的某些属性和方法,不太适合子类怎么办? 研究:子类修改父类的属性和方法 5、父类不想被继承怎么办? 研究:为了保密性,类可设置为不允许继承 6、父类允许被继承,但是不想被修改属性和方法怎么办? 父类的某些属性和方法允许继承,但是不允许子类修改;
本章学习内容
1、子类继承父类的属性和方法 2、父类的属性和方法不够用怎么办? 研究:子类增加新的属性和方法 3、父类如果想保留某些属性和方法怎么办? 研究:父类设定某些属性和方法不允许继承 4、父类的某些属性和方法,不太适合子类怎么办? 研究:子类修改父类的属性和方法 5、父类不想被继承怎么办? 研究:为了保密性,类可设置为不允许继承 6、父类允许被继承,但是不想被修改属性和方法怎么办? 父类的某些属性和方法允许继承,但是不允许子类修改;
思考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; } }
接下来,分析一下多重继承和多层继承
面向对象特性——继承性
Java中支持单继承。 动物
水栖生活动物 陆栖生活动物
水陆两栖动物
思考:为什么取消多重继承?
动物类
马类
优点:继承二者优点 缺点?
驴类
骡子类
为什么取消多重继承?
鱼类
鲫鱼类
猪类
家猪类
面向对象特性——继承性
Java中不支持多重继承。
import p1.A; public
package p2; class B extends A{ void f(){ x=1; } void g(){ y=1; } void h(){ z=1; } Java技术及其应用
知识点小结 1、只有public类,才能被另一个包中的类继承; 2、引入另一个包中的public类,需要用import 3、private类型的属性或方法不能被继承 4、public类型的属性或方法一定可以被继承 5、defalut 和 protected类型呢?
相关文档
最新文档