老生常谈 Java中的继承(必看)
什么是继承
继承是面向对象编程的一种重要特性。它允许一个类(称为子类或派生类)继承另一个类(称为父类或基类)的属性和方法。子类继承父类的属性和方法后,可以在此基础上添加新的属性和方法,也可以重写父类中的方法甚至删除继承的属性和方法。
在Java中,使用 extends
关键字来实现类之间的继承关系。
下面是一个简单的示例,展示了如何使用继承:
// 父类
class Animal {
public void eat() {
System.out.println("Animal is eating.");
}
}
// 子类
class Dog extends Animal {
public void bark() {
System.out.println("Dog is barking.");
}
}
// 测试类
public class Test {
public static void main(String[] args) {
Dog dog = new Dog();
dog.eat(); // 继承了Animal类的方法
dog.bark(); // 自己定义的方法
}
}
继承的特点
- 子类拥有父类的所有非私有属性和方法。
- 子类可以在父类的基础上添加自己独有的属性和方法。
- 子类可以重写父类的方法。
- 子类对象可以直接赋值给父类引用。
- 子类可以继承多个父类的属性和方法(Java不支持多重继承,但通过接口可以实现类似效果)。
继承的注意事项
- 子类不能继承父类的构造方法,但是构造方法会被先调用。
- 子类不能直接访问父类的私有属性和方法,但是可以通过公有的getter和setter方法进行访问。
- 在继承关系中,父类中的构造方法默认会被子类调用,但是也可以通过
super()
关键字显式调用。 - Java中的类默认继承
Object
,如果没有显式指定继承自哪个类,则默认继承Object
。
继承的应用场景
继承主要用于以下场景:
- 代码复用。子类可以通过继承父类的属性和方法,减少重复的代码,提高代码的可读性和可维护性。
- 多态性。子类拥有父类的引用,可以实现动态绑定,更好地发挥面向对象编程的特性。
示例说明
示例1:继承父类的属性和方法
// 父类
class Shape {
protected String color;
public void setColor(String color) {
this.color = color;
}
public String getColor() {
return color;
}
public void draw() {
System.out.println("Shape is drawing.");
}
}
// 子类
class Circle extends Shape {
private int radius;
public void setRadius(int radius) {
this.radius = radius;
}
public int getRadius() {
return radius;
}
@Override
public void draw() {
System.out.println("Circle is drawing.");
}
}
// 测试类
public class Test {
public static void main(String[] args) {
Circle circle = new Circle();
circle.setColor("red"); // 继承了Shape类的方法
circle.setRadius(5); // 自己定义的方法
System.out.println("The color of circle is " + circle.getColor()); // 继承了Shape类的方法
circle.draw(); // 重写了Shape类的方法
}
}
运行结果:
The color of circle is red
Circle is drawing.
示例2:重写父类的方法
// 父类
class Animal {
public void eat() {
System.out.println("Animal is eating.");
}
}
// 子类
class Dog extends Animal {
@Override
public void eat() {
System.out.println("Dog is eating.");
}
}
// 测试类
public class Test {
public static void main(String[] args) {
Animal animal = new Dog(); // 子类对象可以直接赋值给父类引用
animal.eat(); // 根据多态性,调用的是重写后的方法
}
}
运行结果:
Dog is eating.
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:老生常谈 Java中的继承(必看) - Python技术站