当前位置 : 主页 > 编程语言 > c语言 >

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

来源:互联网 收集:自由互联 发布时间:2023-08-28
(目录) 一、抽象类概述 类中如果有抽象方法,该类必须定义为抽象类 二、抽象类格式 格式: 权限修饰符 abstract class 类名{}; 范例: public abstract class Animal { 代码体 }; 三、抽象方法概述 父

(目录)


一、抽象类概述

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

二、抽象类格式

                格式: 权限修饰符 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

上一篇:scanf循环读取与多种数据类型混合读取
下一篇:没有了
网友评论