第4章 类的继承 和多态
第4章 类的继承 和多态
类的继承 #继承是面向对象程序设计中的一个重要 特征。通过必要的说明能够实现某个类 无需重新定义就拥有另一个类的某些属 性和方法,并把这种关系称为继承
类的继承 继承是面向对象程序设计中的一个重要 特征。通过必要的说明能够实现某个类 无需重新定义就拥有另一个类的某些属 性和方法,并把这种关系称为继承
类的继承 在Java中,类是一个层次结构,其中 0 bject为特殊超类或基类,所有的类都直 接或间接地继承Objecta类; 子类继承父类的属性和方法,同时也可以 修改父类的属性或重载父类的方法,以及 在父类的基础上添加新的属性和方法。因 此,父类和子类之间反映的是“一般与特 殊”的关系
类的继承 ➢ 在 Java 中,类是一个层次结构,其中 Object为特殊超类或基类,所有的类都直 接或间接地继承Object类; ➢ 子类继承父类的属性和方法,同时也可以 修改父类的属性或重载父类的方法,以及 在父类的基础上添加新的属性和方法。因 此,父类和子类之间反映的是“一般与特 殊”的关系
父类与子类 是所有类的基类 设备 是上面的子类,又是 是显示器 下面的父类 的子类 鼠标 显示器 是子类机械光电 液晶一般显示纯平 在类的继承中,被继承的类称为父类, 继承而来的类则侧称为子类。有多个子类共 同继承一个父类,那么这个父类就是多个 类的基类
父类与子类 设备 鼠标 显示器 机械 光电 液晶 一般显示 纯平 是所有类的基类 是上面的子类,又是 下面的父类 是显示器 的子类 是子类 在类的继承中,被继承的类称为父类, 继承而来的类则称为子类。有多个子类共 同继承一个父类,那么这个父类就是多个 类的基类
类的继承 #继承的分类 单重继承,是指任何一个类都只有一个单一的父类。 多重继承是指一个类可以有一个以上的父类,它的 静态的数据属性和操作从所有这些父类中继承。 Java语言仅支持类的单重继承
继承的分类 单重继承,是指任何一个类都只有一个单一的父类。 多重继承是指一个类可以有一个以上的父类,它的 静态的数据属性和操作从所有这些父类中继承。 Java语言仅支持类的单重继承。 类的继承
继承的实现 定义继承的形式为: [修饰符1 class类名 [extends 父类] 类体 Java中的继承是通过extends关键字来实现的, 在定义类时使用extends关键字指明新定艾类的 父类,就在两个类之间建立了继承关系。新定 文的类称为子类,它可以从父类那里继承所有 非private的属性和方法作为自己的成员。 修饰符说明类的访问权限(public),是否为 抽象类(abstract)或最终类(final)
继承的实现 定义继承的形式为: [修饰符] class 类名 [extends 父类] { 类体 } Java中的继承是通过extends关键字来实现的, 在定义类时使用extends关键字指明新定义类的 父类,就在两个类之间建立了继承关系。新定 义的类称为子类,它可以从父类那里继承所有 非private的属性和方法作为自己的成员。 修饰符说明类的访问权限(public),是否为 抽象类(abstract)或最终类(final)
继承原则 子类继承父类的所有成员变量(包括实例和类成员变量)和除 构造方法外所有的防法(包括实例和类成员方法),但不包括 父类中的由private修饰的部分 ©子类不能继承父类的构造方法,因为父类的构造方法用来创建 父类的对象,子类需定义自己的构造方法,用来创建子类自己 的对象。 ©子类中新增加的属性和方法是对父类的扩展 国子类中定义的与父类同名的属性是对父类属性的隐藏,同名的 方法是对父类方法的覆盖
继承原则 子类继承父类的所有成员变量(包括实例和类成员变量)和除 构造方法外所有的方法(包括实例和类成员方法),但不包括 父类中的由private修饰的部分 子类不能继承父类的构造方法,因为父类的构造方法用来创建 父类的对象,子类需定义自己的构造方法,用来创建子类自己 的对象。 子类中新增加的属性和方法是对父类的扩展 子类中定义的与父类同名的属性是对父类属性的隐藏,同名的 方法是对父类方法的覆盖
Java实例 —成员变量的继承 子类在继承父类成员变量时,只继承父类中非私有的成员变量。 class Shape( public int x,y; private int m,n; public Shape(){ /父类Shape的构造方法 x=10;y=20: m=100;n=200; System.out.println("x="+x+""+"y="+y); System.out.println("this is a Constractor of shape"); } public void measure(){ int s; s=x*y; System.out.println("result="+s); private void show () System.out.println ("x="+x+""+"y="+y);
Java实例——成员变量的继承 子类在继承父类成员变量时,只继承父类中非私有的成员变量。 class Shape{ public int x,y; private int m,n; public Shape(){ //父类Shape的构造方法 x=10; y=20; m=100; n=200; System.out.println("x="+x+" "+"y="+y); System.out.println("this is a Constractor of shape"); } public void measure(){ int s; s=x*y; System.out.println("result="+s); } private void show(){ System.out.println("x="+x+" "+"y="+y); } }
Java实例_(续) class Rectangle extends Shape{ public static void main(String args[]){ int width=30,height=10; Rectangle tt=new Rectangle();//创建对象时要引用构造方法 tt.x=width; tt.y=height; tt.measure(); /width=tt.m; 对于Rectangle子类不能继承父类的私有成员变量 的值,所以此语句会产生语法错误*/ /height=tt.n; 与上相同 /tt.show(); //不能引用show()私有方法
Java实例——(续) class Rectangle extends Shape{ public static void main(String args[]){ int width=30,height=10; Rectangle tt=new Rectangle(); //创建对象时要引用构造方法 tt.x=width; tt.y=height; tt.measure(); /* width=tt.m; 对于Rectangle子类不能继承父类的私有成员变量 的值,所以此语句会产生语法错误*/ // height=tt.n; 与上相同 // tt.show(); //不能引用show()私有方法 } }
super和this引用 在子类中可以声明与父类同名的成员变量 及成员方法,为了指明是引用父类中的成 员可以使用super关键字,为了指明是引用 子类中的成员可以使用this关键字
super和this引用 在子类中可以声明与父类同名的成员变量 及成员方法,为了指明是引用父类中的成 员可以使用super关键字,为了指明是引用 子类中的成员可以使用this关键字