热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Java进阶之旅:第六阶段深度解析与实践

在之前的Java进阶之旅中,我们已经深入探讨了Java语言的核心特性,包括继承、封装和多态。本文将在此基础上,进一步解析第六阶段的关键概念和技术实践,帮助读者深化对Java高级特性的理解和应用。通过具体的代码示例和实际项目中的应用场景,我们将探讨如何高效地利用这些特性解决复杂问题,提升开发效率和代码质量。

科普

知识

前言

     前面我们学习了Java语言的三大特性----继承,封装和多态,在前面的Java学习历程之----进阶篇(一)中我们学习到,在面向对象中,类和对象是最基本、最重要的组成单元。所有的对象都是通过类来描绘的,即类是对象的抽象,对象是类的具体,比如学生是一个类,具体到张三同学就是一个对象。Java 语言提供了两种类,分别为具体类和抽象类。前面学习接触的类都是具体类。这一节我们来介绍一下抽象类。

一、Java 抽象类

   在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,那么这样的类称为抽象类(abstract)。

在Java中抽象类的语法格式如下:

class {

    (parameter-iist);

}

其中,abstract 表示该类或该方法是抽象的;class_name 表示抽象类的名称;method_name 表示抽象方法名称,parameter-list 表示方法参数列表。

二、抽象类的特征

     如果一个方法使用 abstract 来修饰,则说明该方法是抽象方法,抽象方法只有声明没有实现。需要注意的是 abstract 关键字只能用于普通方法,不能用于 static 方法或者构造方法中。

抽象方法的 3 个特征如下:

  •     抽象方法没有方法体

  •     抽象方法必须存在于抽象类中

  •     子类重写父类时,必须重写父类所有的抽象方法

     在使用 abstract 关键字修饰抽象方法时不能使用 private 修饰,因为抽象方法必须被子类重写,而如果使用了 private 声明,则子类是无法重写的。(访问权限可参考Java学习历程之----进阶篇(四))

三、抽象类的使用规则

抽象类的定义和使用规则如下:

  • 抽象类和抽象方法都要使用 abstract 关键字声明。

  • 如果一个方法被声明为抽象的,那么这个类也必须声明为抽象的。而一个抽象类中,可以有 0~n 个抽象方法,以及 0~n 个具体方法。

  • 抽象类不能实例化,也就是不能使用 new 关键字创建对象。

四、实战

接下来我们通过实操进一步了解抽象类

1)首先创建一个表示图形的抽象类 Shape,代码如下所示。

package code.tisheng6;public abstract class Diagram {//定义一个抽象类Diagrampublic int width; // 几何图形的长public int height; // 几何图形的宽public double radius;//定义半径public Diagram(int width, int height) {//构造方法为width和height赋值this.width = width;this.height = height;}public Diagram(double radius){//构造方法为radius赋值this.radius = radius;}public abstract double area(); // 定义抽象方法,计算面积public abstract double perimeter();//定义抽象方法计算周长
}

2)定义一个长方形类,该类继承自形状类 Diagram,并重写了 area( ) 和Perimeter()抽象方法, 子类重写父类时,必须重写父类所有的抽象方法。长方形类的代码如下:

package code.tisheng6;public class Rectangle extends Diagram {public Rectangle(int width, int height) {super(width, height);}// 重写父类中所有的抽象方法,实现计算长方形面积和周长的功能,注意,抽象类的所有抽象方法都必须被子类重写!!!@Overridepublic double area() {return width * height;}public double perimeter(){return 2*(width+height);}
}

3)定义一个圆形类,该类与长方形类一样,需要继承形状类Diagram,并重写父类中的 area()和perimeter()抽象方法。圆形类的代码实现如下:

package code.tisheng6;public class Circle extends Diagram{public Circle(float radius) {super(radius);}// 重写父类中的抽象方法,实现计算圆形面积和周长的功能@Overridepublic double area() {return Math.PI*radius*radius;}public double perimeter() {return 2*Math.PI*radius;}}

4)最后创建一个测试类,分别创建长方形类和圆形类的对象,并调用各类中的 area() 和perimeter()方法,打印出不同形状的几何图形的面积和周长。测试类的代码如下:

package code.tisheng6;public class Test {public static void main(String[] args) {Rectangle rectangle = new Rectangle(5, 4); // 创建长方形类对象System.out.println("长方形的面积为:" + rectangle.area());System.out.println("长方形的周长为:" + rectangle.perimeter());Circle circle = new Circle( 5); // 创建圆形类对象System.out.println("圆形的面积为:"+String.format("%.2f", circle.area()));System.out.println("圆形的周长为:"+String.format("%.2f", circle.perimeter()));}
}

运行结果及截图如下所示:

END

结语

     疫情在渐渐好转,生活正慢慢回归正轨,落下的任务终归是要还的,继续加油吧!另外,我们现在练习的这些题目都是比较简单的,大家学有余力的条件下可以多找难题练习,编程在于实践!上周习题参考答案如下:

1.方法的重载

2.方法的重写

3.多态

编辑:玥怡居士|审核:世外居士

往期精彩回顾

Java学习历程之----提升篇(五)

Java学习历程之----提升篇(四)

Java学习历程之----提升篇(三)

扫码立即关注我们

IT进阶之旅

我就知道你“在看”


推荐阅读
  • Explore a common issue encountered when implementing an OAuth 1.0a API, specifically the inability to encode null objects and how to resolve it. ... [详细]
  • 主要用了2个类来实现的,话不多说,直接看运行结果,然后在奉上源代码1.Index.javaimportjava.awt.Color;im ... [详细]
  • 本文深入探讨了 Java 中的 Serializable 接口,解释了其实现机制、用途及注意事项,帮助开发者更好地理解和使用序列化功能。 ... [详细]
  • 2023年京东Android面试真题解析与经验分享
    本文由一位拥有6年Android开发经验的工程师撰写,详细解析了京东面试中常见的技术问题。涵盖引用传递、Handler机制、ListView优化、多线程控制及ANR处理等核心知识点。 ... [详细]
  • 本文详细介绍了Java中org.neo4j.helpers.collection.Iterators.single()方法的功能、使用场景及代码示例,帮助开发者更好地理解和应用该方法。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 本文介绍了如何使用 Spring Boot DevTools 实现应用程序在开发过程中自动重启。这一特性显著提高了开发效率,特别是在集成开发环境(IDE)中工作时,能够提供快速的反馈循环。默认情况下,DevTools 会监控类路径上的文件变化,并根据需要触发应用重启。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 本文介绍了Java并发库中的阻塞队列(BlockingQueue)及其典型应用场景。通过具体实例,展示了如何利用LinkedBlockingQueue实现线程间高效、安全的数据传递,并结合线程池和原子类优化性能。 ... [详细]
  • 本文详细介绍了Java中org.eclipse.ui.forms.widgets.ExpandableComposite类的addExpansionListener()方法,并提供了多个实际代码示例,帮助开发者更好地理解和使用该方法。这些示例来源于多个知名开源项目,具有很高的参考价值。 ... [详细]
  • 使用 Azure Service Principal 和 Microsoft Graph API 获取 AAD 用户列表
    本文介绍了一段通用代码示例,该代码不仅能够操作 Azure Active Directory (AAD),还可以通过 Azure Service Principal 的授权访问和管理 Azure 订阅资源。Azure 的架构可以分为两个层级:AAD 和 Subscription。 ... [详细]
  • 深入解析Spring Cloud Ribbon负载均衡机制
    本文详细介绍了Spring Cloud中的Ribbon组件如何实现服务调用的负载均衡。通过分析其工作原理、源码结构及配置方式,帮助读者理解Ribbon在分布式系统中的重要作用。 ... [详细]
  • 本文详细介绍了Akka中的BackoffSupervisor机制,探讨其在处理持久化失败和Actor重启时的应用。通过具体示例,展示了如何配置和使用BackoffSupervisor以实现更细粒度的异常处理。 ... [详细]
  • 本文详细介绍了如何构建一个高效的UI管理系统,集中处理UI页面的打开、关闭、层级管理和页面跳转等问题。通过UIManager统一管理外部切换逻辑,实现功能逻辑分散化和代码复用,支持多人协作开发。 ... [详细]
  • 本文详细探讨了HTML表单中GET和POST请求的区别,包括它们的工作原理、数据传输方式、安全性及适用场景。同时,通过实例展示了如何在Servlet中处理这两种请求。 ... [详细]
author-avatar
WingKeii-
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有