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

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 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,你的支持是对作者最大的鼓励,不足之处可以在评论区多多指正,交流学习

目录
相关文章
|
1天前
|
存储 Java 程序员
Java基础的灵魂——Object类方法详解(社招面试不踩坑)
本文介绍了Java中`Object`类的几个重要方法,包括`toString`、`equals`、`hashCode`、`finalize`、`clone`、`getClass`、`notify`和`wait`。这些方法是面试中的常考点,掌握它们有助于理解Java对象的行为和实现多线程编程。作者通过具体示例和应用场景,详细解析了每个方法的作用和重写技巧,帮助读者更好地应对面试和技术开发。
19 4
|
12天前
|
Java API
Java 对象释放与 finalize 方法
关于 Java 对象释放的疑惑解答,以及 finalize 方法的相关知识。
35 17
|
6天前
|
Java 测试技术 Maven
Java一分钟之-PowerMock:静态方法与私有方法测试
通过本文的详细介绍,您可以使用PowerMock轻松地测试Java代码中的静态方法和私有方法。PowerMock通过扩展Mockito,提供了强大的功能,帮助开发者在复杂的测试场景中保持高效和准确的单元测试。希望本文对您的Java单元测试有所帮助。
10 2
|
8天前
|
Java
Java基础(13)抽象类、接口
本文介绍了Java面向对象编程中的抽象类和接口两个核心概念。抽象类不能被实例化,通常用于定义子类的通用方法和属性;接口则是完全抽象的类,允许声明一组方法但不实现它们。文章通过代码示例详细解析了抽象类和接口的定义及实现,并讨论了它们的区别和使用场景。
|
10天前
|
Java 测试技术 开发者
Java零基础-抽象类详解
【10月更文挑战第17天】Java零基础教学篇,手把手实践教学!
10 2
|
13天前
|
Java 测试技术 开发者
Java零基础-抽象类详解
【10月更文挑战第15天】Java零基础教学篇,手把手实践教学!
17 2
|
14天前
|
Java 开发者
在Java多线程编程中,选择合适的线程创建方法至关重要
【10月更文挑战第20天】在Java多线程编程中,选择合适的线程创建方法至关重要。本文通过案例分析,探讨了继承Thread类和实现Runnable接口两种方法的优缺点及适用场景,帮助开发者做出明智的选择。
12 2
|
14天前
|
安全 Java
Java多线程通信新解:本文通过生产者-消费者模型案例,深入解析wait()、notify()、notifyAll()方法的实用技巧
【10月更文挑战第20天】Java多线程通信新解:本文通过生产者-消费者模型案例,深入解析wait()、notify()、notifyAll()方法的实用技巧,包括避免在循环外调用wait()、优先使用notifyAll()、确保线程安全及处理InterruptedException等,帮助读者更好地掌握这些方法的应用。
12 1
|
7天前
|
Java Spring
JAVA获取重定向地址URL的两种方法
【10月更文挑战第17天】本文介绍了两种在Java中获取HTTP响应头中的Location字段的方法:一种是使用HttpURLConnection,另一种是使用Spring的RestTemplate。通过设置连接超时和禁用自动重定向,确保请求按预期执行。此外,还提供了一个自定义的`NoRedirectSimpleClientHttpRequestFactory`类,用于禁用RestTemplate的自动重定向功能。
|
8天前
|
安全 Java
java 中 i++ 到底是否线程安全?
本文通过实例探讨了 `i++` 在多线程环境下的线程安全性问题。首先,使用 100 个线程分别执行 10000 次 `i++` 操作,发现最终结果小于预期的 1000000,证明 `i++` 是线程不安全的。接着,介绍了两种解决方法:使用 `synchronized` 关键字加锁和使用 `AtomicInteger` 类。其中,`AtomicInteger` 通过 `CAS` 操作实现了高效的线程安全。最后,通过分析字节码和源码,解释了 `i++` 为何线程不安全以及 `AtomicInteger` 如何保证线程安全。
java 中 i++ 到底是否线程安全?

推荐镜像

更多