Java继承与多态:父类到子类的转换

需积分: 0 1 下载量 156 浏览量 更新于2024-08-23 收藏 479KB PPT 举报
所有类的父类" "Java类的继承、多态以及访问控制是面向对象编程中的核心概念。在Java中,类的继承允许我们创建一个新类(子类)来扩展已存在的类(父类),从而实现代码的复用和特定功能的定制。子类继承父类后,可以获得父类的所有非私有属性和方法。在给定的例子中,`Person`类被`Student`类继承,`Student`类添加了`school`属性,并且可以重写`getInfo()`方法以提供更具体的信息。 访问控制符在Java中包括`public`、`protected`、`private`和默认(包访问)。这些控制符决定了类的成员(如字段和方法)对其他类的可见性。`public`成员可以在任何地方访问,`protected`成员在同一个包或子类中可以访问,`private`成员只能在定义它们的类内部访问,而默认访问级别则限制在同一包内的访问。 方法的重写(Override)是指子类可以提供与父类相同签名但不同实现的方法。这使得子类能够覆盖或扩展父类的功能。例如,`Student`类可以重写`getInfo()`方法,以便返回包含学校信息的字符串。 `Super`关键字用于引用当前对象的父类。在子类中,如果一个方法或字段与父类中的方法或字段同名,我们可以使用`super`来调用父类的版本。例如,`super.getInfo()`会调用`Person`类的`getInfo()`方法。 子类与父类的转换是多态性的体现。在Java中,一个父类引用可以指向子类对象。在给定的代码段中,`Person p2 = new Student("Zhangyi", 18, "dlut");`就是一个父类引用指向子类对象的例子。这种转换是安全的,因为子类是父类的特例。然而,尝试将父类对象强制转换为子类(如`Student s3 = (Student) p1;`)可能会导致ClassCastException,除非父类引用实际上指向的是子类对象。 `instanceof`运算符用于检查对象是否是某个类或其子类的实例。例如,`if (p2 instanceof Student)`会返回`true`,因为`p2`引用的是一个`Student`对象。 Java的继承规则规定,一个类只能有一个直接父类,这就是所谓的单继承。但是,通过接口,一个类可以实现多个接口,间接实现多继承的效果。`Object`类是所有类的最终父类,每个类都隐式地继承了`Object`类,因此所有类都具备`Object`类的一些基本方法,如`toString()`、`equals()`和`hashCode()`。 在子类构造函数中,通常会使用`super()`调用来调用父类的构造函数,确保父类的状态得到正确的初始化。如果没有显式调用,Java会自动插入一个无参数的`super()`调用,前提是父类有一个匹配的无参数构造函数。 总结来说,Java的继承、多态和访问控制是构建可扩展和灵活的代码结构的关键工具。它们帮助我们创建层次化的类结构,使得代码重用和模块化成为可能,同时提供了动态绑定和运行时类型检查的能力,提高了程序的灵活性和安全性。"