教你从实战中领悟继承(下) | 带你学《Java面向对象编程》之四十四

简介: 本节基于数组类型数据,带着读者进行数组相关操作类的编写,帮助读者彻底掌握继承。

上一篇:教你从实战中领悟继承(中) | 带你学《Java面向对象编程》之四十三
【本节目标】
通过阅读本节内容,你将进一步熟悉数组的概念与其相关操作,并对继承有更加深入的理解,甚至熟练掌握这一概念。

案例分析四(数组操作)

建立一个可以实现整型数组的操作类(Array),而后在里面可以操作的数组的大小由外部来决定,而后在Array类里面需要提供有数组的如下处理: 进行数据的增加(如果数据满了则无法增加)、可以实现数组的容量扩充、取得数组全部内容。
完成之后在此基础上再派生出两个子类:

  • 数组排序类:返回的数据必须是排序后的结果;
  • 数组反转类: 可以实现内容的首尾交换。

对于本程序而言,首先要考虑的是父类如何定义完善。
第一步:实现基本的数组操作类定义

class Array {        //数组的操作类
    private int [] data ;      //整型数组
    private int foot ;      //进行数组索引控制
    public Array(int len) {
        if (len > 0) {
          this.data = new int [len] ;    //开辟数组
        } else {
            this.data = new int [1] ;     //开辟一个空间
        }
    }
//实现数组的容量扩充,给出的是扩充大小,实际大小:已有大小+扩充大小
    public void increament (int num) {
        int newData [] = new int [this.data.length + num] ;
        System.arraycopy(this.data , 0 , newData , 0 ,this.data.length) ;
        this.data = newData ;    //改变数组引用
    }
    public boolean add(int num) {    //数据增加
        if (this.foot < this.data.length) {    //有位置
          this.data[this.foot ++] = num ;
          return true ;
        }
        return false ;
    }
    public int[] getData () {
        return this.data ;
    }
}
public class JavaDemo{
    public static void main(String args[]) {
        Array arr = new Array(5) ;
        System.out.println(arr.add(10)) ;
        System.out.println(arr.add(5)) ;   
        System.out.println(arr.add(20)) ;
        System.out.println(arr.add(3)) ;
        System.out.println(arr.add(6)) ;
        arr.increament(3) ;
        System.out.println(arr.add(1)) ;
        System.out.println(arr.add(7)) ;
        System.out.println(arr.add(0)) ;
    }         
}

第二步:进行排序子类定义

class Array {        //数组的操作类
    private int [] data ;      //整型数组
    private int foot ;      //进行数组索引控制
    public Array(int len) {
         if (len > 0) {
              this.data = new int [len] ;    //开辟数组
         } else {
              this.data = new int [1] ;     //开辟一个空间
         }
     }
//实现数组的容量扩充,给出的是扩充大小,实际大小:已有大小+扩充大小
     public void increament (int num) {
         int newData [] = new int [this.data.length + num] ;
         System.arraycopy(this.data , 0 , newData , 0 ,this.data.length) ;
         this.data = newData ;    //改变数组引用
     }
     public boolean add(int num) {    //数据增加
        if (this.foot < this.data.length) {    //有位置
           this.data[this.foot ++] = num ;
           return true ;
        }
        return false ;
     }
     public int[] getData () {
         return this.data ;
     }
}
class SortArray extends Array {      //定义排序子类
    public SortArray(int len) {
        super(len) ;
    }
    public int [] getData() {           //获得排序结果 
        java.util.Array.sort(super.getData()) ;      //排序
        return super.getData() ;
    }
}
public class JavaDemo{
    public static void main(String args[]) {
        SortArray arr = new SortArray (5) ;
        System.out.println(arr.add(10)) ;
        System.out.println(arr.add(5)) ;   
        System.out.println(arr.add(20)) ;
        System.out.println(arr.add(3)) ;
        System.out.println(arr.add(6)) ;
        arr.increament(3) ;
        System.out.println(arr.add(1)) ;
        System.out.println(arr.add(7)) ;
        System.out.println(arr.add(0)) ;
        int result [] = arr.getData() ; 
        for (int temp : result) {
            System.out.println(temp + “、”) ;
        }
    }         
}

第三步:定义反转子类

class Array {        //数组的操作类
    private int [] data ;      //整型数组
    private int foot ;      //进行数组索引控制
    public Array(int len) {
        if (len > 0) {
           this.data = new int [len] ;    //开辟数组
        } else {
           this.data = new int [1] ;     //开辟一个空间
        }
    }
//实现数组的容量扩充,给出的是扩充大小,实际大小:已有大小+扩充大小
    public void increament (int num) {
        int newData [] = new int [this.data.length + num] ;
        System.arraycopy(this.data , 0 , newData , 0 ,this.data.length) ;
        this.data = newData ;    //改变数组引用
    }
    public boolean add(int num) {    //数据增加
        if (this.foot < this.data.length) {    //有位置
           this.data[this.foot ++] = num ;
           return true ;
        }
        return false ;
    }
    public int[] getData () {
        return this.data ;
    }
}
class ReverseArray extends Array {      //定义反转子类
    public ReverseArray (int len) {
        super(len) ;
    }
    public int [] getData() {           //获得排序结果
       int center = super.getData().length / 2 ;
       int head = 0 ;
       int tail = super.getData().length -1 ;
       for (int x = 0 ; x < center ; x ++) {
          int temp = super.getData() [head] = super.getData() [tail];
          super.getData() [tail] = temp ;
          head ++ ;
          tail -- ; 
       }
       return super.getData() ;
    }
}
public class JavaDemo{
    public static void main(String args[]) {
        SortArray arr = new SortArray (5) ;
        System.out.println(arr.add(10)) ;
        System.out.println(arr.add(5)) ;   
        System.out.println(arr.add(20)) ;
        System.out.println(arr.add(3)) ;
        System.out.println(arr.add(6)) ;
        arr.increament(3) ;
        System.out.println(arr.add(1)) ;
        System.out.println(arr.add(7)) ;
        System.out.println(arr.add(0)) ;
        int result [] = arr.getData() ; 
        for (int temp : result) {
            System.out.println(temp + “、”) ;
        }
    }         
}

image.png
图一 执行结果一

父类之中定义的方法名称往往都很重要,如果功能相同的时候子类应该以覆写父类的方法为优先考虑。
想学习更多的Java的课程吗?从小白到大神,从入门到精通,更多精彩不容错过!免费为您提供更多的学习资源。
本内容视频来源于阿里云大学

下一篇:三分钟带你认识注解 | 带你学《Java面向对象编程》之四十五
更多Java面向对象编程文章查看此处

相关文章
|
2月前
|
安全 Java 开发者
告别NullPointerException:Java Optional实战指南
告别NullPointerException:Java Optional实战指南
278 119
|
3月前
|
存储 前端开发 Java
【JAVA】Java 项目实战之 Java Web 在线商城项目开发实战指南
本文介绍基于Java Web的在线商城技术方案与实现,涵盖三层架构设计、MySQL数据库建模及核心功能开发。通过Spring MVC + MyBatis + Thymeleaf实现商品展示、购物车等模块,提供完整代码示例,助力掌握Java Web项目实战技能。(238字)
414 0
|
3月前
|
Java 开发者
Java并发编程:CountDownLatch实战解析
Java并发编程:CountDownLatch实战解析
469 100
|
3月前
|
人工智能 Java API
Java AI智能体实战:使用LangChain4j构建能使用工具的AI助手
随着AI技术的发展,AI智能体(Agent)能够通过使用工具来执行复杂任务,从而大幅扩展其能力边界。本文介绍如何在Java中使用LangChain4j框架构建一个能够使用外部工具的AI智能体。我们将通过一个具体示例——一个能获取天气信息和执行数学计算的AI助手,详细讲解如何定义工具、创建智能体并处理执行流程。本文包含完整的代码示例和架构说明,帮助Java开发者快速上手AI智能体的开发。
1204 8
|
3月前
|
人工智能 Java API
Java与大模型集成实战:构建智能Java应用的新范式
随着大型语言模型(LLM)的API化,将其强大的自然语言处理能力集成到现有Java应用中已成为提升应用智能水平的关键路径。本文旨在为Java开发者提供一份实用的集成指南。我们将深入探讨如何使用Spring Boot 3框架,通过HTTP客户端与OpenAI GPT(或兼容API)进行高效、安全的交互。内容涵盖项目依赖配置、异步非阻塞的API调用、请求与响应的结构化处理、异常管理以及一些面向生产环境的最佳实践,并附带完整的代码示例,助您快速将AI能力融入Java生态。
578 12
|
2月前
|
存储 人工智能 算法
从零掌握贪心算法Java版:LeetCode 10题实战解析(上)
在算法世界里,有一种思想如同生活中的"见好就收"——每次做出当前看来最优的选择,寄希望于通过局部最优达成全局最优。这种思想就是贪心算法,它以其简洁高效的特点,成为解决最优问题的利器。今天我们就来系统学习贪心算法的核心思想,并通过10道LeetCode经典题目实战演练,带你掌握这种"步步为营"的解题思维。
|
Java 程序员
Java中的继承和多态:理解面向对象编程的核心概念
【8月更文挑战第22天】在Java的世界中,继承和多态不仅仅是编程技巧,它们是构建可维护、可扩展软件架构的基石。通过本文,我们将深入探讨这两个概念,并揭示它们如何共同作用于面向对象编程(OOP)的实践之中。你将了解继承如何简化代码重用,以及多态如何为程序提供灵活性和扩展性。让我们启程,探索Java语言中这些强大特性的秘密。
|
11月前
|
Java
Java 面向对象编程的三大法宝:封装、继承与多态
本文介绍了Java面向对象编程中的三大核心概念:封装、继承和多态。
577 15
|
Java 编译器
Java——类与对象(继承和多态)
本文介绍了面向对象编程中的继承概念,包括如何避免重复代码、构造方法的调用规则、成员变量的访问以及权限修饰符的使用。文中详细解释了继承与组合的区别,并探讨了多态的概念,包括向上转型、向下转型和方法的重写。此外,还讨论了静态绑定和动态绑定的区别,以及多态带来的优势和弊端。
344 7
Java——类与对象(继承和多态)