Java2高级编程:父类与子类转化及多态性探讨

需积分: 18 1 下载量 139 浏览量 更新于2024-08-18 收藏 666KB PPT 举报
"Java2SE高级编程中涉及的父类对象与子类对象转化、多态性、访问控制符、静态属性与方法、抽象类与方法、最终类和方法、继承以及UML类图表示" 在Java编程中,多态性是面向对象的重要特性之一,它允许一个父类类型的引用指向其子类的对象。例如,`Employee`是父类,`CommonEmployee`是子类,可以创建一个`CommonEmployee`对象并赋值给`Employee`类型的引用,即`Employee emp = new CommonEmployee();`这种情况下,`emp`只能调用`Employee`类中定义的方法,但如果子类`CommonEmployee`覆盖了父类的方法,实际调用的是子类的方法,这就是动态联编或动态性。 然而,将父类对象转化为子类对象需要谨慎,如`Graphics g = new Graphics();`和`Graphics2D g2 = (Graphics2D) g;`这行代码,将`Graphics`对象强制转换为`Graphics2D`对象,如果`g`实际上不是`Graphics2D`的实例,程序会抛出`ClassCastException`。因此,这样的转化需要确保安全,否则可能导致运行时错误。 访问控制符用于限制类的属性和方法的可访问性。`public`表示任何类都可以访问,`default`(无修饰符)仅限于同一包内的类,`private`仅限于本类,`protected`则允许本包和所有子类访问,而`private protected`则是Java 9引入的,只对所有子类开放,不包括同包的类。 静态属性和方法属于类本身,而不是类的实例。静态属性在类加载时初始化,可以通过类名直接调用,而静态方法不能直接操作非静态属性,因为它们在没有实例的情况下被调用。例如,`static void draw()`方法只能处理静态属性,但可以通过实例引用访问其他类的对象。 抽象类和抽象方法是用来定义接口和表示概念的,它们不提供具体实现。例如,`abstract class Shape`定义了`draw()`和`area()`两个抽象方法,由子类去实现。抽象类不能实例化,抽象方法必须存在于抽象类中。`final`关键字用于阻止继承(`final class`)、修改属性值(`final`属性)或覆盖方法(`final`方法)。`finalize()`方法在对象被垃圾回收前会被调用,通常用于资源清理。 继承是面向对象的另一关键概念,它允许子类继承父类的属性和方法,如各种类型的电话卡可以继承自一个基本的`PhoneCard`类。通过继承,可以创建一个类层次结构,如图形类`Shape`可以派生出`Triangle`、`Circle`等子类。UML(统一建模语言)是表示类和对象关系的图形工具,`CommonEmployee`类的UML表示会包含它的属性如`managerName`以及相关方法如`getManagerName()`。 在编程实践中,理解和熟练运用这些概念是构建高效、可维护的Java应用程序的基础。