详解Java面向对象中的继承
什么是继承?
继承是面向对象编程中的一种重要概念,它允许一个类从另一个类中继承相同的属性和方法,同时可以在自己的子类中添加新的属性和方法。在继承关系中,被继承的类称为父类或基类,继承的类称为子类或派生类。
Java语言中继承的实现方式是通过使用关键字extends
,如下所示:
public class ChildClass extends ParentClass {
// 子类的代码
}
其中,ChildClass
是子类的名字,ParentClass
是父类的名字,extends
关键字用来指定继承关系。
继承的好处
1. 提高代码复用性
当多个类有许多公共属性和方法的时候,可以把它们提取到一个父类中。这样可以避免重复编写代码,提高代码复用性。
2. 提高代码扩展性
当需要在已有类的基础上添加新的功能时,可以通过继承的方式来进行扩展。可以在父类中定义一些通用方法,然后在子类中通过重写方法或添加新的方法,在不修改父类代码的情况下添加新的功能。
继承的特点
1. 子类可以继承父类中可见的属性和方法
在Java语言中,子类可以继承父类中声明为public和protected的属性和方法,但是不能继承private的属性和方法。
2. 子类可以重写继承自父类的方法
在子类中,如果需要改变父类中某个方法的实现,可以通过重写该方法来实现。
以下是一个例子:
public class Animal {
public void move() {
System.out.println("动物可以移动");
}
}
public class Dog extends Animal {
public void move() {
System.out.println("狗可以跑和走");
}
}
在该例子中,Dog
类重写了父类Animal
的move()
方法,从而可以改变动物移动的方式。
3. 子类可以调用父类的构造方法
在子类的构造方法中,可以使用super()
关键字来调用父类的构造方法,从而完成对父类构造方法的调用。
以下是一个例子:
public class Animal {
public Animal(String name) {
System.out.println("动物的名字是:" + name);
}
}
public class Dog extends Animal {
public Dog(String name) {
super(name);
}
}
在该例子中,Dog
类继承了父类Animal
的构造方法,并在自己的构造方法中调用了父类的构造方法,从而完成了对父类构造方法的调用。
示例说明
示例一
假设有一个Person
类,其中包含人的姓名和年龄信息。现在,我们想要创建一个Student
类,它可以继承Person
类,并在该类中添加学生的学号和班级信息。
以下是代码示例:
public class Person {
protected String name;
protected int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public void displayPersonInfo() {
System.out.println("姓名:" + name + ",年龄:" + age);
}
}
public class Student extends Person {
protected String studentId;
protected String className;
public Student(String name, int age, String studentId, String className) {
super(name, age);
this.studentId = studentId;
this.className = className;
}
public void displayStudentInfo() {
System.out.println("姓名:" + name + ",年龄:" + age + ",学号:" + studentId + ",班级:" + className);
}
}
在该例子中,Student
类继承了父类Person
的属性和方法,并添加了学生的学号和班级信息。通过调用displayStudentInfo()
方法,可以输出学生的所有信息。
示例二
假设有一个Shape
类,其中包含形状的面积和周长计算方法。现在,我们想要创建一个Rectangle
类和一个Circle
类,分别代表长方形和圆形,并在这两个类中重新定义面积和周长的计算方式。
以下是代码示例:
public class Shape {
protected double area;
protected double perimeter;
public void calculateArea() {}
public void calculatePerimeter() {}
}
public class Rectangle extends Shape {
private double width;
private double height;
public Rectangle(double width, double height) {
this.width = width;
this.height = height;
}
public void calculateArea() {
area = width * height;
}
public void calculatePerimeter() {
perimeter = (width + height) * 2;
}
public void displayInfo() {
System.out.println("长方形的面积为:" + area + ",周长为:" + perimeter);
}
}
public class Circle extends Shape {
private double radius;
public Circle(double radius) {
this.radius = radius;
}
public void calculateArea() {
area = Math.PI * radius * radius;
}
public void calculatePerimeter() {
perimeter = 2 * Math.PI * radius;
}
public void displayInfo() {
System.out.println("圆形的面积为:" + area + ",周长为:" + perimeter);
}
}
在该例子中,Rectangle
类和Circle
类分别继承了父类Shape
的属性和方法,并重写了calculateArea()
和calculatePerimeter()
方法,计算不同形状的面积和周长。通过调用displayInfo()
方法,可以输出不同形状的面积和周长的信息。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解Java面向对象中的继承 - Python技术站