1.Java的继承
继承是面向对象的三大特征之一,可以使得子类具有父类的属性和方法,还可以在子类中重新定义,追加属性和方法。
继承是指在原有类的基础上,进行功能扩展,创建新的类型。
Java继承主要作用是可以减少代码重复。通过继承,我们可以让程序更加清晰易懂,易于维护和复用。
2.Java的重写
重写(override):也称为覆盖。重写是子类对父类非静态、非private修饰,非final修饰,非构造方法等的实现过程 进行重新编写, 返回值和形参都不能改变。即外壳不变,核心重写!重写的好处在于子类可以根据需要,定义特定 于自己的行为。 也就是说子类能够根据需要实现父类的方法。
方法重写的规则:
1. 子类在重写父类的方法时,一般必须与父类方法原型一致: 返回值类型、 方法名、 参数列表要完全一致。
2. 被重写的方法返回值类型可以不同,但是必须是具有父子关系的。
3. 访问权限不能比父类中被重写的方法的访问权限更低。例如:如果父类方法被public修饰,则子类中重写该方 法就不能声明为 protected
4. 父类被static、private修饰的方法、构造方法都不能被重写。
5. 重写的方法, 可以使用 @Override 注解来显式指定. 有了这个注解能帮我们进行一些合法性校验. 例如不小心 将方法名字拼写错了 (比如写成 aet), 那么此时编译器就会发现父类中没有 aet 方法, 就会编译报错, 提示无法 构成重写。
让我们编写代码来看一下
public class Animal {
public void makeSound() {
System.out.println("The animal makes a sound.");
}
}
public class Dog extends Animal {
@Override
public void makeSound() {
System.out.println("The dog barks.");
}
}
public class Main {
public static void main(String[] args) {
Animal myAnimal = new Animal();
Dog myDog = new Dog();
myAnimal.makeSound(); // prints "The animal makes a sound."
myDog.makeSound(); // prints "The dog barks."
}
}
在这个例子中,
Dog
类继承了Animal
类并重写了其makeSound()
方法。因此,当我们创建一个Dog
实例并调用其makeSound()
方法时,实际执行的是Dog
类中的版本,而不是Animal
类中的版本。这就是 Java 中的继承和重写的基本原理。