首页 > 编程语言 >Java中的继承和重写

Java中的继承和重写

时间:2024-09-12 10:52:55浏览次数:3  
标签:Java 继承 方法 Animal 子类 父类 重写 public

### Java中的继承关系

继承是面向对象编程(OOP)中的一个核心概念,它允许一个类(子类)继承另一个类(父类)的属性和方法。通过继承,子类可以重用父类的代码,并且可以在不修改父类的情况下扩展或修改其行为。在Java中,继承关系通过`extends`关键字来实现。

#### 1. 继承的基本概念

在Java中,继承的基本语法如下:

```java
class ParentClass {
    // 父类的属性和方法
}

class ChildClass extends ParentClass {
    // 子类的属性和方法
}
```

- **父类(Parent Class)**:也称为基类或超类(Superclass),是提供属性和方法的类。
- **子类(Child Class)**:也称为派生类或子类(Subclass),继承父类的属性和方法,并可以添加自己的属性和方法。

#### 2. 继承的特性

- **代码重用**:子类可以直接使用父类的属性和方法,减少了代码的重复。
- **方法重写(Override)**:子类可以重写父类的方法,以实现不同的行为。
- **多态性**:通过继承,子类可以被视为父类的实例,从而实现多态性。

#### 3. 继承的实例

让我们通过一个简单的例子来理解继承的概念。

```java
// 父类:动物
class Animal {
    String name;

    public Animal(String name) {
        this.name = name;
    }

    public void eat() {
        System.out.println(name + " is eating.");
    }

    public void sleep() {
        System.out.println(name + " is sleeping.");
    }
}

// 子类:狗
class Dog extends Animal {
    public Dog(String name) {
        super(name); // 调用父类的构造方法
    }

    // 重写父类的方法
    @Override
    public void eat() {
        System.out.println(name + " is eating dog food.");
    }

    // 子类特有的方法
    public void bark() {
        System.out.println(name + " is barking.");
    }
}

// 子类:猫
class Cat extends Animal {
    public Cat(String name) {
        super(name); // 调用父类的构造方法
    }

    // 重写父类的方法
    @Override
    public void eat() {
        System.out.println(name + " is eating cat food.");
    }

    // 子类特有的方法
    public void meow() {
        System.out.println(name + " is meowing.");
    }
}

// 测试类
public class Main {
    public static void main(String[] args) {
        Dog dog = new Dog("Buddy");
        Cat cat = new Cat("Whiskers");

        dog.eat();  // 输出: Buddy is eating dog food.
        dog.sleep();  // 输出: Buddy is sleeping.
        dog.bark();  // 输出: Buddy is barking.

        cat.eat();  // 输出: Whiskers is eating cat food.
        cat.sleep();  // 输出: Whiskers is sleeping.
        cat.meow();  // 输出: Whiskers is meowing.
    }
}
```

#### 4. 关键点解析

- **`super`关键字**:在子类的构造方法中,使用`super`关键字调用父类的构造方法。`super`关键字也可以用于调用父类的方法。
- **方法重写**:子类可以重写父类的方法,以实现不同的行为。重写的方法必须具有相同的签名(方法名、参数列表和返回类型)。
- **多态性**:通过继承,子类可以被视为父类的实例。例如,`Dog`和`Cat`都可以被视为`Animal`的实例。

#### 5. 继承的限制

- **单继承**:Java只支持单继承,即一个类只能继承一个父类。
- **final类**:如果一个类被声明为`final`,则它不能被继承。
- **private成员**:父类的`private`成员不能被子类直接访问。

#### 6. 总结

继承是Java中实现代码重用和多态性的重要机制。通过继承,子类可以继承父类的属性和方法,并且可以在不修改父类的情况下扩展或修改其行为。理解继承的基本概念和使用方法,对于掌握Java面向对象编程至关重要。

### Java中的重写方法:深入理解与实例解析

在Java中,方法重写(Method Overriding)是面向对象编程(OOP)中的一个重要概念。它允许子类提供一个与父类中同名方法的具体实现,从而实现多态性。通过方法重写,子类可以在不改变父类代码的情况下,扩展或修改父类的方法行为。

#### 1. 方法重写的基本概念

方法重写是指在子类中定义一个与父类中方法签名(方法名、参数列表和返回类型)相同的方法。重写方法的目的是为了在子类中提供一个与父类方法不同的实现。

#### 2. 方法重写的规则

- **方法签名相同**:重写方法的方法名、参数列表和返回类型必须与父类中的方法完全相同。
- **访问修饰符**:重写方法的访问修饰符不能比父类方法的访问修饰符更严格。例如,如果父类方法的访问修饰符是`protected`,那么子类方法的访问修饰符可以是`protected`或`public`,但不能是`private`。
- **异常处理**:重写方法不能抛出比父类方法更多的异常,但可以抛出更少的异常或不抛出异常。
- **`@Override`注解**:建议在重写方法上使用`@Override`注解,以确保方法确实重写了父类的方法。

#### 3. 方法重写的实例

让我们通过一个简单的例子来理解方法重写的概念。

```java
// 父类:动物
class Animal {
    public void makeSound() {
        System.out.println("Animal makes a sound");
    }
}

// 子类:狗
class Dog extends Animal {
    // 重写父类的方法
    @Override
    public void makeSound() {
        System.out.println("Dog barks");
    }
}

// 子类:猫
class Cat extends Animal {
    // 重写父类的方法
    @Override
    public void makeSound() {
        System.out.println("Cat meows");
    }
}

// 测试类
public class Main {
    public static void main(String[] args) {
        Animal animal = new Animal();
        Animal dog = new Dog();
        Animal cat = new Cat();

        animal.makeSound();  // 输出: Animal makes a sound
        dog.makeSound();     // 输出: Dog barks
        cat.makeSound();     // 输出: Cat meows
    }
}
```

#### 4. 关键点解析

- **多态性**:通过方法重写,子类可以被视为父类的实例。在上面的例子中,`Dog`和`Cat`都是`Animal`的实例,但调用`makeSound()`方法时,会根据实际对象的类型调用相应的方法。
- **`@Override`注解**:`@Override`注解用于确保方法确实重写了父类的方法。如果方法签名不匹配,编译器会报错。
- **访问修饰符**:重写方法的访问修饰符不能比父类方法的访问修饰符更严格。例如,如果父类方法的访问修饰符是`protected`,那么子类方法的访问修饰符可以是`protected`或`public`。

#### 5. 方法重写的应用场景

- **扩展功能**:子类可以通过重写父类的方法来扩展功能。例如,父类有一个通用的`makeSound()`方法,子类可以重写该方法以实现特定的声音。
- **多态性**:通过方法重写,可以实现多态性,使得代码更加灵活和可扩展。
- **模板方法模式**:父类定义一个模板方法,子类通过重写模板方法中的某些步骤来实现不同的行为。

#### 6. 总结

方法重写是Java中实现多态性的重要机制。通过方法重写,子类可以在不改变父类代码的情况下,扩展或修改父类的方法行为。理解方法重写的基本概念和使用方法,对于掌握Java面向对象编程至关重要。

希望这篇博客能帮助你更好地理解Java中的方法重写。如果你有任何问题或建议,欢迎在评论区留言讨论!

标签:Java,继承,方法,Animal,子类,父类,重写,public
From: https://blog.csdn.net/2301_77081232/article/details/142004891

相关文章

  • 使用java程序对字符串进行加密
    程序功能程序的功能是对用户输入的字符串,使用常见的三种加密算法(MD5、SHA-1和SHA-256)进行加密,并输出每种算法加密后的结果。主要步骤包括:用户通过控制台输入一个字符串。程序使用MessageDigest类,对输入的字符串分别进行MD5、SHA-1和SHA-256算法的加密处理。每......
  • 28 Java中的循环结构
    Java中的循环结构在Java编程中,循环结构是实现重复执行代码块的关键工具。通过循环结构,程序员可以高效地处理大量数据、执行重复任务,从而简化代码并提高程序的效率。本文将深入探讨Java中的循环结构,帮助你全面理解其工作原理及实际应用。1.前置知识在深入探讨循环结构之......
  • Java反射语法
    1.反射1.1反射的概述【理解】反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意属性和方法;这种动态获取信息以及动态调用对象方法的功能称为Java语言的反射机制。1.2获取Class类对象的三种方式【应用】三种......
  • Java技术深度探索:高并发场景下的线程安全与性能优化
    Java技术深度探索:高并发场景下的线程安全与性能优化在当今的软件开发领域,随着互联网应用的日益复杂和用户量的激增,高并发成为了一个不可忽视的技术挑战。Java,作为一门广泛应用于企业级开发的编程语言,其内置的并发支持机制如线程(Thread)、锁(Lock)、并发集合(ConcurrentCollect......
  • 在线考试|基于java的模拟考试系统小程序(源码+数据库+文档)
    在线考试|模拟考试系统|模拟考试系统小程序目录基于java的模拟考试系统小程序一、前言二、系统设计三、系统功能设计四、数据库设计 五、核心代码 六、论文参考七、最新计算机毕设选题推荐八、源码获取:博主介绍:✌️大厂码农|毕设布道师,阿里云开发社区乘风者计划专......
  • Java程序部署
    在Java应用程序中,通常我们编写的代码(Java源代码)会被编译成字节码(即.class文件),这些字节码文件是Java虚拟机(JVM)可以执行的二进制格式。然而,当谈到“最后启动的时候是二进制文件+配置文件”时,这通常指的是Java应用程序的部署和运行方式,其中不仅包含了编译后的二进制文件(即.class文件或......
  • 计算机毕业设计必看必学!! 89352 基于python的网上挂号预约系统,原创定制程序, java、P
    摘 要随着科学技术的飞速发展,社会的方方面面、各行各业都在努力与现代的先进技术接轨,通过科技手段来提高自身的优势,医院当然也不例外。网上挂号预约系统是以实际运用为开发背景,运用软件工程原理和开发方法,采用Python技术构建的一个管理系统。整个开发过程首先对软件系统进......
  • javascript 计算今天离目标日期还有多少天
    /***计算从今天起到指定日期还有多少天。*@param{string}fixedDate-目标日期字符串,格式应为"YYYY-MM-DD"。*@returns{number}-从今天起到目标日期的天数。*@example*daysUntil("2024-12-25");//假设今天是2024-09-11,将返回104*/exportfunction......
  • Java毕业设计之新能源汽车销售管理系统
    项目技术架构:该SSM+Vue的校园二手交易系统,后端采用SSM架构,前端采用Vue+ElementUI实现页面的快速开发,并使用关系型数据库MySQL存储系统运行数据。本系统分为两种角色,分别是系统管理员,前台用户。核心主要功能:系统主要功能包括前台首页、网站公告、全部商品、商品搜索、分类展......
  • java学习9.11
    IDEA里导入mybatis,lombok等依赖成功连接好数据库。并将MYSQL数据库同时用navicat连接便利创建表等操作。设计实体类student并在数据库设计好表接下来就是如何实现在数据库里的增删改查设计接口类mapper,将操作简化最后能正常运行实现功能。总的来说这一块内容,刚开始学,肯定......