Java中的抽象类和抽象方法是什么?概述到解析层层深入了解

本文涉及的产品
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
全局流量管理 GTM,标准版 1个月
简介: Java中的抽象类和抽象方法是什么?概述到解析层层深入了解

一、抽象类概述

            类中如果有抽象方法,该类必须定义为抽象类

二、抽象类格式

                格式: 权限修饰符 abstract class 类名{};
                
                范例: public abstract class Animal {
                             代码体
                             };

三、抽象方法概述

             父类需要定义某个方法,但是不知道如何去实现这个方法,
             具体的功能应该让子类去实现这样的方法就可以定义为抽象方法

四、抽象方法格式

              格式:  权限修饰符 abstract 返回值类型 方法名(参数列表);      
              
              范例:  public abstract   void run();

// 不能写私有private抽象方法,因为不能被子类进行重写

五、抽象类的特点

      *抽象类无法创建对象
      
      *有抽象方法,这个类一定是抽象类   (抽象类和抽象方法的关系)
      *抽象类中不一定有抽象方法
      
      *子类继承抽象类
             *要么重写所有抽象方法
             *要么子类也必须定义为抽象类     //如:public abstract class Dog extends Animal

在这里插入图片描述


六、抽象类的成员特点

   ●成员变量
                    可以是变量

                    也可以是常量
   ●构造方法

                  有构造方法,但是不能实例化(通过多态来进行实例化)

                  那么,构造方法的作用是什么呢?用于子类访问父类数据的初始化

   ●成员方法

                 可以有抽象方法:限定子类必须完成某些动作(限定子类为抽象类或者子类要进行重写)

                 也可以有非抽象方法:提高代码复用性(是用继承来保证的)

七、抽象类和普通类的区别

       *抽象类:拥有所有能力,还有定义抽象方法的能力,不能创建对象
          

       *普通类:不能定义抽象方法

八、案例讲解

在这里插入图片描述

public abstract class Card {

    private  String id;
    private  double balance;

    public Card() {
    }

    public Card(String id, double balance) {
        this.id = id;
        this.balance = balance;
    }

    public abstract void pay(double money) ;




    public String getId() {
        return id;
    }


    public void setId(String id) {
        this.id = id;
    }


    public double getBalance() {
        return balance;
    }


    public void setBalance(double balance) {
        this.balance = balance;
    }


}
public class GoldenCard extends  Card{

    public GoldenCard() {
    }

    public GoldenCard(String id, double balance) {
        super(id, balance);
    }



    @Override
    public void pay(double money) {
        System.out.println("支付成功");
        System.out.println("原件:"+money);

        //打折价
        double paymoney=money*0.8;
        System.out.println("优惠价:"+paymoney);

        //余额
        double newBalance=getBalance()-paymoney;
        System.out.println("余额:"+newBalance);

        //更新余额为最新的金钱
        setBalance(newBalance);

    }



}
import java.util.Scanner;

public class Test {
    public static void main(String[] args) {


        GoldenCard ca=new GoldenCard("vip0001",10000);


        Scanner rd=new Scanner(System.in);
        System.out.println("请输入加油的金额:");
        double a=rd.nextDouble();
        ca.pay(a);


        System.out.println("请输入加油的金额:");
        a=rd.nextDouble();
        ca.pay(a);

    }
}

在这里插入图片描述


作者:KJ.JK

本文仅用于交流学习,未经作者允许,禁止转载,更勿做其他用途,违者必究。
文章对你有所帮助的话,欢迎给个赞或者 star,你的支持是对作者最大的鼓励,不足之处可以在评论区多多指正,交流学习

目录
相关文章
|
6天前
|
安全 Ubuntu Shell
深入解析 vsftpd 2.3.4 的笑脸漏洞及其检测方法
本文详细解析了 vsftpd 2.3.4 版本中的“笑脸漏洞”,该漏洞允许攻击者通过特定用户名和密码触发后门,获取远程代码执行权限。文章提供了漏洞概述、影响范围及一个 Python 脚本,用于检测目标服务器是否受此漏洞影响。通过连接至目标服务器并尝试登录特定用户名,脚本能够判断服务器是否存在该漏洞,并给出相应的警告信息。
118 84
|
5天前
|
存储 Java 开发者
浅析JVM方法解析、创建和链接
上一篇文章《你知道Java类是如何被加载的吗?》分析了HotSpot是如何加载Java类的,本文再来分析下Hotspot又是如何解析、创建和链接类方法的。
|
17天前
|
Java 编译器
Java 泛型详细解析
本文将带你详细解析 Java 泛型,了解泛型的原理、常见的使用方法以及泛型的局限性,让你对泛型有更深入的了解。
29 2
Java 泛型详细解析
|
17天前
|
缓存 监控 Java
Java线程池提交任务流程底层源码与源码解析
【11月更文挑战第30天】嘿,各位技术爱好者们,今天咱们来聊聊Java线程池提交任务的底层源码与源码解析。作为一个资深的Java开发者,我相信你一定对线程池并不陌生。线程池作为并发编程中的一大利器,其重要性不言而喻。今天,我将以对话的方式,带你一步步深入线程池的奥秘,从概述到功能点,再到背景和业务点,最后到底层原理和示例,让你对线程池有一个全新的认识。
47 12
|
14天前
|
存储 算法 Java
Java内存管理深度解析####
本文深入探讨了Java虚拟机(JVM)中的内存分配与垃圾回收机制,揭示了其高效管理内存的奥秘。文章首先概述了JVM内存模型,随后详细阐述了堆、栈、方法区等关键区域的作用及管理策略。在垃圾回收部分,重点介绍了标记-清除、复制算法、标记-整理等多种回收算法的工作原理及其适用场景,并通过实际案例分析了不同GC策略对应用性能的影响。对于开发者而言,理解这些原理有助于编写出更加高效、稳定的Java应用程序。 ####
|
14天前
|
存储 监控 算法
Java虚拟机(JVM)垃圾回收机制深度解析与优化策略####
本文旨在深入探讨Java虚拟机(JVM)的垃圾回收机制,揭示其工作原理、常见算法及参数调优方法。通过剖析垃圾回收的生命周期、内存区域划分以及GC日志分析,为开发者提供一套实用的JVM垃圾回收优化指南,助力提升Java应用的性能与稳定性。 ####
|
17天前
|
负载均衡 网络协议 算法
Docker容器环境中服务发现与负载均衡的技术与方法,涵盖环境变量、DNS、集中式服务发现系统等方式
本文探讨了Docker容器环境中服务发现与负载均衡的技术与方法,涵盖环境变量、DNS、集中式服务发现系统等方式,以及软件负载均衡器、云服务负载均衡、容器编排工具等实现手段,强调两者结合的重要性及面临挑战的应对措施。
44 3
|
17天前
|
Java 数据库连接 开发者
Java中的异常处理机制:深入解析与最佳实践####
本文旨在为Java开发者提供一份关于异常处理机制的全面指南,从基础概念到高级技巧,涵盖try-catch结构、自定义异常、异常链分析以及最佳实践策略。不同于传统的摘要概述,本文将以一个实际项目案例为线索,逐步揭示如何高效地管理运行时错误,提升代码的健壮性和可维护性。通过对比常见误区与优化方案,读者将获得编写更加健壮Java应用程序的实用知识。 --- ####
|
20天前
|
数据采集 存储 Web App开发
Java爬虫:深入解析商品详情的利器
在数字化时代,信息处理能力成为企业竞争的关键。本文探讨如何利用Java编写高效、准确的商品详情爬虫,涵盖爬虫技术概述、Java爬虫优势、开发步骤、法律法规遵守及数据处理分析等内容,助力电商领域市场趋势把握与决策支持。
|
21天前
|
安全 Java 开发者
Java中WAIT和NOTIFY方法必须在同步块中调用的原因
在Java多线程编程中,`wait()`和`notify()`方法是实现线程间协作的关键。这两个方法必须在同步块或同步方法中调用,这一要求背后有着深刻的原因。本文将深入探讨为什么`wait()`和`notify()`方法必须在同步块中调用,以及这一机制如何确保线程安全和避免死锁。
35 4

推荐镜像

更多