文档详情

Java04(深入面向对象编程).ppt

发布:2019-05-22约7.31千字共39页下载文档
文本预览下载声明
深入面向对象编程 本章内容 类的继承 高级访问控制 包 ==运算符与equals()方法 Object类的方法 类的继承 继承是面向对象程序设计语言的另一重要特征,理解继承是理解面向对象程序设计的关键,通过继承可以实现代码的复用,使程序的复杂性线性的增长,而不是随规模的增大呈几何级数增长。 在Java中,通过关键字extends继承一个已有的类,被继承的类称为父类(超类,基类),新的类称为子类(派生类)。 在Java中,不允许多继承,即一个类只能有一个父类。 继承示例 类的继承 继承能够使子类拥有父类的所有的属性和方法,而不需要在子类的类定义时重新定义父类的这些属性和方法,子类即可以保持父类原有的属性和方法,也可以对从父类那里继承而来的属性和方法进行修改,在定义了继承关系后,我们改动父类的一个属性或方法时,子类也会自动改变,但是这些属性和方法必须是非私有,并且没有被子类重新定义的 注:子类拥有父类的所有的属性和方法但不能访问父类中的私有属性与方法 一个继承的例子 public class Student extends Person{ private int id; public void setId(int id){ this.id=id; } public void study(){ System.out.println(getName()+ is reading!); } public void showInfomation(){ System.out.println(id:+id+ name:+getName()+ age:+getAge()); } public static void main(String[] args[]){ Student stu=new Student(); stu.setName(zhangsan); stu.setAge(20); stu.study(); stu.showInfomation(); } } 构造方法不能被继承 子类不从超类继承构造方法 子类的构造方法一定会调用父类的构造方法,默认调用不带参的构造方法 在子类中用super()来调用父类的构造方法 特殊变量super 特殊变量super,提供了对父类的访问。 可以使用super访问父类被子类隐藏的变量或覆盖的方法。 每个子类构造方法的第一条语句,都是隐含地调用super(),如果父类没有这种形式的构造方法,那么在编译的时候就会报错。 方法的覆盖(override) 在子类中定义一个与父类同名、返回类型、参数类型均相同一个方法,称为方法的覆盖。 覆盖发生在子类与父类之间。 方法覆盖的规则 覆盖方法的返回值类型必须与它所覆盖的方法相同 覆盖方法不能比它所覆盖的方法的访问性差 覆盖方法不能比它所覆盖的方法抛出更多的异常 方法的覆盖与重载的区别 方法的覆盖是子类和父类之间的关系,而重载可以是发生在一个类内部多个方法间 方法的覆盖一般是两个方法间的,而重载时可能有多个重载方法 覆盖的方法有相同的方法名和形参表,而重载的方法只能有相同的方法名,不能有相同的形参表 覆盖时区分方法的是根据调用他的对象,而重载是根据形参来决定调用的是哪个方法 用final修饰的方法是不能被子类覆盖的,只能被重载 多态的概念 多态是指在一棵继承树中的类可以有多个同名但不同方法体以及不同形参的方法。 有两种情况: 覆盖:在子类中直接定义和父类同样的属性和方法,但重新编写了方法体,即子类与父类方法的形参与返回值都相同,而内部处理不同,这种方法在使用过程中,Java虚拟机会根据调用这个方法的对象来确定哪个方法被调用 重载:同一个类定义中有多个同名的方法,但有不同的形参,而且每个方法有不同的方法体,调用时根据形参的个数和类型来决定调用的是哪个方法 对象在继承关系中改变 Java语法规定: 子类实例可以被当作父类的一个对象使用,而父类实例不能被当作子类的一个对象使用 如果一个被父类对象通过赋值指向的地址是子类对象所在的地址,按照前一条准则,这个对象仍然是父类的对象,但它可以通过强制类型转换成子类对象。 对象的类型转换 类型转换用来恢复一个对象的全部功能 向上的类型转换(子类转父类)是隐含地实现的 向下的类型转换(父类转子类)必须针对子类,并由编译器检查。也就是说类型转换只能发生在有继承关系的父类与子类之间 可以使用instanceof来测试一个对象的类型 类型转换示例 Person person=new Person(); Student student=new Student(); Worker worker=new Worker(); person=student; pe
显示全部
相似文档