二,Java面向对象的特点其二:继承

Java面向对象:继承与方法重载详解

在Java编程中,继承和方法重载是面向对象编程的核心概念,它们允许我们构建具有层次结构的代码,提高代码的复用性和可维护性。本文将详细探讨Java中的继承机制和方法重载,包括super关键字、final关键字的使用和特点。

继承

继承是面向对象编程中的一个基本概念,它允许一个类(子类)继承另一个类(父类)的属性和方法。

概述

通过使用extends关键字,一个类可以继承另一个类的属性和方法。

特点

java中,类与类之间继承的时候,不允许一次继承多个类,只允许单继承,但是可以进行多重继承,形成继承体系

注意事项

1、子类无法继承父类中私有的成员
2、子类不能继承父类的构造方法
3、不要为了部分功能而去继承

示例代码

class Parent {
    void show() {
        System.out.println("Parent show()");
    }
}

class Child extends Parent {
    void show() {
        System.out.println("Child show()");
    }
}

public class InheritanceExample {
    public static void main(String[] args) {
        Parent parent = new Parent();
        Child child = new Child();

        parent.show(); // 输出: Parent show()
        child.show(); // 输出: Child show()
    }
}

super关键字

子类寻找成员变量并使用的流程:
1、先就近原则,在方法内部中查找一次,若找到就使用
2、若方法内部没有需要的变量,去当前类成员变量的位置上查找,若找到就使用
3、若当前类成员变量的位置上没有需要的变量,去父类中的成员变量的位置上查找,若找到就使用
4、若上面3个地方都没有找到所需要的变量,就报错

java中提供了另外一个关键字super,用法跟this很像,但是super代表的是当前子类的直接父类的引用
在子类中,可以通过super关键字使用直接父类中的非私有成员

特点

  1. 在java继承关系中,要想初始化子类,必须先初始化其父类
    2.super用于调用父类的构造方法。
  2. 子类构造方法中的第一行默认调用父类的无参构造方法。

注意事项

super关键字的使用注意事项:
1、super仅代表当前类中的直接父类,无法使用super获取父类的父类中的成员
2、super后面不能再调用super

示例代码

class Parent {
    private String name = "Parent";

    public Parent() {
        System.out.println("Parent constructor: " + name);
    }
}

class Child extends Parent {
    private String name = "Child";

    public Child() {
        super(); // 调用父类的构造方法
        System.out.println("Child constructor: " + name);
    }
}

final关键字

final关键字用于修饰类、变量或方法,表示它们不能被继承或重写。

特点

  1. final修饰的类不能被继承。
  2. final修饰的变量值不能被修改(变量变常量)
    (1)对于基本数据类型是具体的值不能改变
    (2)对于引用数据类型是地址值不能改变
  3. final修饰的方法不能被重写。

示例代码

final class FinalClass {
    private final int value = 10;
    public void showValue() {
        System.out.println("Value: " + value);
    }
}

class TestFinal {
    public static void main(String[] args) {
        FinalClass fc = new FinalClass();
        fc.showValue(); // 输出: Value: 10

        // 尝试修改final变量
        fc.value = 20; // 错误:不能修改final变量
    }
}

方法重写

方法的重写(Method Overriding)是面向对象编程中的一个重要概念,特别是在Java中。它指的是子类提供一个与父类中某个方法具有相同名称、返回类型和参数列表的方法。这个子类的方法被称为父类方法的重写。

重写的方法必须遵循以下规则:

1.方法名相同:重写的方法必须有与父类方法相同的方法名、返回类型和参数列表。
2.返回类型:重写的方法的返回类型必须与父类方法的返回类型相同,或者是其子类型。
3.访问权限:重写的方法不能比父类方法更加严格。例如,如果父类方法是public,那么重写的方法也必须是public。
4.返回类型:如果父类方法的返回类型是void,则重写的方法也必须是void。
5.重写的目的是允许子类根据需要改变或扩展父类的行为。这是多态性的一个关键方面,使得我们可以在运行时动态地决定调用哪个类的方法。

特点

  1. 子类无法重写父类中的私有成员。
  2. 子类无法重写父类中的静态成员。
  3. 子类重写时,方法的权限不能比父类的还要低。

重写所需要注意事项:

    1、子类无法重写父类中的私有方法
    2、子类无法继承且重写父类中的静态方法
    3、子类重写方法的权限,要大于等于父类的方法权限,推荐在没有要求的情况下,保持和父亲一致的权限就好了

面试题:重写和重载什么区别?【overload和override什么区别?】

    1、重写是发生在继承关系中的,指的是子类方法的返回值类型和方法名以及参数列表与父类方法一致,只是实现不一样
    2、重载是发生在同一个类中,值的是方法名一样,参数列表不同,与返回值无关的现象

示例代码

class Animal {
    void makeSound() {
        System.out.println("Some sound");
    }
}

class Dog extends Animal {
    @Override
    void makeSound() {
        System.out.println("Bark");
    }
}
/*
在这个例子中,Dog 类重写了 Animal 类的 makeSound 方法。当我们创建一个 Dog 类的实例并调用 makeSound 方法时,
将会输出 "Bark",而不是 "Some sound"。这就是方法重写的效果。
*/
posted @ 2024-10-20 18:45  bjynjj  阅读(50)  评论(0)    收藏  举报