【java】java三大特性之继承

文章目录

  • 【java】java三大特性之继承
    • 1、继承机制说明
    • 2、举个
    • 3、继承的常用场景
    • 4、代码示例

【java】java三大特性之继承

1、继承机制说明

Java的继承机制是面向对象编程的重要概念之一,它允许一个类(子类)基于另一个类(父类)来构建,并且可以继承父类的属性和方法。下面是关于Java继承机制的一些重要点:

  1. extends关键字:在Java中,通过使用 extends 关键字来建立类之间的继承关系。子类使用 extends 关键字引用父类,这样子类就可以继承父类的特性。

  2. 单继承:Java是单继承的,意味着一个类只能继承一个直接的父类。但是可以通过多层继承来间接地继承多个类的特性。

  3. super关键字:子类可以使用 super 关键字来引用父类的成员变量和方法。通过 super
    关键字,子类可以调用父类的构造方法、访问父类的属性或者调用父类的方法。

  4. 方法重写:子类可以重写(覆盖)父类的方法,以便在子类中提供特定的实现。子类通过提供与父类中相同名称和参数列表的方法来实现方法重写。

  5. 访问权限:子类可以访问其父类中的 public 和 protected 成员,但不能直接访问父类中的 private 成员。

  6. 继承层次:继承可以形成层次结构,即一个类可以作为另一个类的子类,而这个子类又可以作为另一个类的父类,以此类推。这样的层次结构可以通过继承来实现代码的组织和复用。

  7. 抽象类和接口:Java中还有抽象类和接口的概念,它们也是用来实现代码重用和多态性的重要机制。抽象类可以包含抽象方法和具体方法,而接口只包含常量和抽象方法。子类可以通过继承抽象类或者实现接口来实现特定的功能。

继承机制是Java编程语言中的核心概念之一,它使得代码的组织和复用变得更加灵活和方便,同时也提供了多态性的支持,使得代码更具有扩展性和可维护性

2、举个

这段代码(代码在最后)涉及了继承、定时任务调度和Spring的Bean管理。
定义一个父类Fu,两个子类分别为ZiOne、ZiTwo。在父类中定义类变量str,通过定时任务打印出各自调用print方法后的输出结果。

  1. Fu 类是一个普通的Spring服务类,使用了 @Service 注解,表示它是一个Spring Bean,会被Spring容器管理。它还使用了 @EnableScheduling 注解,表示启用了定时任务调度功能。

  2. ZiOneZiTwo 类分别继承了 Fu 类。它们也是Spring服务类,并使用了相同的注解,表示它们也是Spring Bean,并且继承了父类 Fu 中的定时任务调度功能和 str 字段。

  3. Fu 类中,有一个 print() 方法,使用了 @Scheduled 注解,表示这是一个定时任务方法,会定期执行。它会在每隔15秒输出当前线程名和 str 字段的值。

  4. 在子类 ZiOneZiTwo 中,重写了 print() 方法,并在方法中调用了父类的 print() 方法,从而实现了定时任务的调用链。在构造方法中,它们分别修改了父类中的 str 字段的值。

  5. 在Spring启动后,由于使用了 @EnableScheduling 注解,定时任务调度功能会自动生效。因此,每隔15秒,所有Bean中的 print() 方法都会被调用一次。由于子类重写了父类的 print() 方法,所以每个子类的 print() 方法会被分别调用,输出当前线程名和对应子类中 str 字段的值。

输出结果(日志均由父类的线程打印出,所以线程名一致,但输出的str变了):

pool-7-thread-1--------->zione
pool-7-thread-1--------->fu
pool-7-thread-1--------->zitwo

代码演示了继承和方法重写的概念,以及Spring Boot中定时任务的调度机制。通过继承父类和重写方法,子类可以对父类的行为进行扩展或修改。同时,Spring Boot的定时任务功能可以方便地进行任务调度,使得定时执行的任务可以轻松地集成到应用程序中。

3、继承的常用场景

继承是面向对象编程中的一个重要概念,常用于以下场景:

  1. 代码复用:继承可以使子类获得父类的属性和方法,从而避免了重复编写相同的代码。通过继承,可以将共性的功能提取到父类中,子类只需专注于实现自己特有的功能。

  2. 多态性:继承是实现多态性的基础之一。通过继承,子类可以重写父类的方法,从而实现多态。在程序运行时,可以根据实际情况调用子类的方法,从而实现不同对象的不同行为。

  3. 软件设计中的抽象化:继承可以帮助软件设计者抽象出更一般化、更通用的类,从而提高代码的可维护性和可扩展性。通过继承,可以建立层次结构,将相关的类组织在一起,使代码更易于理解和管理。

  4. 实现接口和抽象类:接口和抽象类通常用于定义类的行为和规范。通过继承,可以实现接口和抽象类中定义的方法,从而使类具有特定的行为和功能。

  5. 框架和库的设计:在框架和库的设计中,继承常常被用来定义基础类或通用类,然后由具体的子类来扩展和定制功能。这样可以提高代码的重用性,并且使框架和库更加灵活和易于扩展。

  6. 实现“is-a”关系:继承用于描述类之间的“is-a”关系,即子类是父类的一种特殊形式。例如,猫是动物的一种,所以可以用继承来表示猫是动物类的子类。

  7. 覆盖特定行为:有时候,父类提供的方法不能完全满足子类的需求,子类可以通过继承来覆盖父类的方法,以实现特定的行为。

这些是继承常见的应用场景,通过合理的使用继承,可以使程序设计更加模块化、可扩展和易于维护。然而,过度使用继承也会导致代码的耦合性增加,使得代码变得复杂和难以理解,因此在设计和使用时需要谨慎考虑。

4、代码示例

Fu.Class

import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;

/**
 * @Author: Kyle
 * @date 2024/2/18 16:07
 */
@EnableScheduling
@Service
public class Fu {

    protected String str = "fu";


    @Scheduled(cron = "0/15 * * * * ?")
    public void print(){
        System.out.println(Thread.currentThread().getName()+"--------->"+str);
    }

    public String getStr() {
        return str;
    }

    public void setStr(String str) {
        this.str = str;
    }
}

ZiOne.Class

import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;

import javax.annotation.PostConstruct;

/**
 * @Author: Kyle
 * @date 2024/2/18 16:10
 */
@EnableScheduling
@Service
public class ZiOne extends Fu{

    public ZiOne() {
        super.str = "zione";
    }

    @Scheduled(cron = "0/15 * * * * ?")
    public void print(){
        super.print();
    }
}

ZiTwo.Class

import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;

import javax.annotation.PostConstruct;

/**
 * @Author: Kyle
 * @date 2024/2/18 16:10
 */
@EnableScheduling
@Service
public class ZiTwo extends Fu{

    public ZiTwo() {
        super.str = "zitwo";
    }

    @Scheduled(cron = "0/15 * * * * ?")
    public void print(){
        super.print();
    }
}

你可能感兴趣的:(java,开发语言)