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

简介: 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,你的支持是对作者最大的鼓励,不足之处可以在评论区多多指正,交流学习

目录
相关文章
|
4月前
|
机器学习/深度学习 JSON Java
Java调用Python的5种实用方案:从简单到进阶的全场景解析
在机器学习与大数据融合背景下,Java与Python协同开发成为企业常见需求。本文通过真实案例解析5种主流调用方案,涵盖脚本调用到微服务架构,助力开发者根据业务场景选择最优方案,提升开发效率与系统性能。
1023 0
|
4月前
|
Java
Java的CAS机制深度解析
CAS(Compare-And-Swap)是并发编程中的原子操作,用于实现多线程环境下的无锁数据同步。它通过比较内存值与预期值,决定是否更新值,从而避免锁的使用。CAS广泛应用于Java的原子类和并发包中,如AtomicInteger和ConcurrentHashMap,提升了并发性能。尽管CAS具有高性能、无死锁等优点,但也存在ABA问题、循环开销大及仅支持单变量原子操作等缺点。合理使用CAS,结合实际场景选择同步机制,能有效提升程序性能。
|
4月前
|
Java 开发者
Java并发编程:CountDownLatch实战解析
Java并发编程:CountDownLatch实战解析
480 100
|
5月前
|
存储 缓存 Java
Java数组全解析:一维、多维与内存模型
本文深入解析Java数组的内存布局与操作技巧,涵盖一维及多维数组的声明、初始化、内存模型,以及数组常见陷阱和性能优化。通过图文结合的方式帮助开发者彻底理解数组本质,并提供Arrays工具类的实用方法与面试高频问题解析,助你掌握数组核心知识,避免常见错误。
|
3月前
|
存储 安全 Java
《数据之美》:Java集合框架全景解析
Java集合框架是数据管理的核心工具,涵盖List、Set、Map等体系,提供丰富接口与实现类,支持高效的数据操作与算法处理。
|
4月前
|
Java 开发者
Java 函数式编程全解析:静态方法引用、实例方法引用、特定类型方法引用与构造器引用实战教程
本文介绍Java 8函数式编程中的四种方法引用:静态、实例、特定类型及构造器引用,通过简洁示例演示其用法,帮助开发者提升代码可读性与简洁性。
|
3月前
|
存储 人工智能 算法
从零掌握贪心算法Java版:LeetCode 10题实战解析(上)
在算法世界里,有一种思想如同生活中的"见好就收"——每次做出当前看来最优的选择,寄希望于通过局部最优达成全局最优。这种思想就是贪心算法,它以其简洁高效的特点,成为解决最优问题的利器。今天我们就来系统学习贪心算法的核心思想,并通过10道LeetCode经典题目实战演练,带你掌握这种"步步为营"的解题思维。
|
4月前
|
安全 Java API
Java SE 与 Java EE 区别解析及应用场景对比
在Java编程世界中,Java SE(Java Standard Edition)和Java EE(Java Enterprise Edition)是两个重要的平台版本,它们各自有着独特的定位和应用场景。理解它们之间的差异,对于开发者选择合适的技术栈进行项目开发至关重要。
519 1
|
5月前
|
存储 缓存 算法
Java数据类型与运算符深度解析
本文深入解析Java中容易混淆的基础知识,包括八大基本数据类型(如int、Integer)、自动装箱与拆箱机制,以及运算符(如&与&&)的使用区别。通过代码示例剖析内存布局、取值范围及常见陷阱,帮助开发者写出更高效、健壮的代码,并附有面试高频问题解析,夯实基础。
|
5月前
|
算法 Java 测试技术
零基础学 Java: 从语法入门到企业级项目实战的详细学习路线解析
本文为零基础学习者提供完整的Java学习路线,涵盖语法基础、面向对象编程、数据结构与算法、多线程、JVM原理、Spring框架、Spring Boot及项目实战,助你从入门到进阶,系统掌握Java编程技能,提升实战开发能力。
281 0

推荐镜像

更多
  • DNS