Java面向对象继承详解:构造方法与方法重写

需积分: 5 0 下载量 140 浏览量 更新于2024-08-03 收藏 171KB PDF 举报
"Tedu一段关于Java面向对象编程中继承的讲解" 在Java编程语言中,面向对象编程(Object-Oriented Programming, OOP)是一种重要的编程范式,它基于类和对象的概念。在这个主题中,我们将深入探讨Java中的继承机制,这是OOP的四个核心特性(封装、继承、多态和抽象)之一。 继承允许一个类(子类或派生类)从另一个类(超类、基类或父类)继承属性和方法,从而实现代码的复用和类的层次结构。通过使用关键字`extends`,我们可以声明一个类是另一个类的子类。例如: ```java public class ChildClass extends ParentClass { // 子类的定义 } ``` 在这里,`ChildClass`继承了`ParentClass`的所有非私有(public和protected)成员,包括字段(成员变量)和方法。子类可以添加其特有的属性和行为,同时也可以访问和扩展从超类继承的内容。 当子类和超类中存在同名的成员变量时,我们可以使用`this`关键字来明确指定当前对象的成员变量。例如: ```java public class MyClass { int x; public void method() { int x = 10; // 局部变量 this.x = 20; // 访问成员变量 } } ``` 同样,`super`关键字用于访问超类的成员变量或方法。如果子类和超类中存在同名的成员,我们可以通过`super`来区分它们: ```java public class Parent { int y = 100; } public class Child extends Parent { int y = 200; public void display() { System.out.println("Superclass y: " + super.y); // 访问超类的y System.out.println("Subclass y: " + this.y); // 访问子类的y } } ``` 在子类的构造方法中,Java规定必须先构造超类,确保超类的初始化在子类之前完成。如果子类构造器没有显式调用超类构造器,编译器会默认添加`super()`调用超类的无参构造器。如果子类构造器中显式调用了超类构造器,那么`super()`就不会默认添加,且`super()`调用必须位于子类构造器的第一行。 方法的重写(Overriding)是Java中另一个关键概念,它允许子类改变超类的特定方法的行为。如果子类和超类中有相同方法名和参数列表的方法,子类的方法将覆盖超类的方法。调用方法时,根据对象的实际类型确定执行哪个方法,即“动态绑定”或“多态”。 ```java public class Parent { public void doSomething() { System.out.println("Parent's method"); } } public class Child extends Parent { @Override public void doSomething() { System.out.println("Child's method"); } } Child child = new Child(); child.doSomething(); // 输出 "Child's method" ``` 在以上代码中,`Child`类重写了`Parent`类的`doSomething`方法。当我们通过`child`对象调用这个方法时,实际上是调用了`Child`类的版本。 Java中的继承提供了代码的复用性、类的层次结构以及多态性,是构建复杂软件系统的重要工具。正确理解和使用继承机制有助于提高代码的可维护性和扩展性。