Java的封装

何谓封装

定义类并不等于做好了面向对象中封装(Encapsulation)的概念,那么到底什么才有封装的含义?你必须以对象的角度来思考问题。
封装对象初始流程
假设要写个可以管理储值卡的应用程序,首先得定义储值卡会记录哪些数据,像是储值卡号码、余额、红利点数,在Java中可使用 class关键字进行定义

public class CashCard {
    String number;
    int balance,bonus;

}

使用 Cashcard. java储存,编译为Cashcard.class并将这个位码给朋友使用,你的朋友要建立5张储值卡的数据

Cashcard card1=new Cashcard();
 card1 number = "A001"
 card1 balance =500
 card1 bonus =0;
 cashcard card2=new Cashcard();
 card2 number "A002"
 card2 balance=300:
 card2 bonus =0;
 ...

在这里可以看到,如果想存取对象的数据成员,可以通过“”运算符加上数据成员名称你发现到每次他在建立储值卡对象时,都会做相同的初始动作,也就是指定卡号、余额与红利点数,这个流程是重复的,更多的Cashcard对象建立会带来更多的程序代码重复,重复代码意味着可以改进。用构造函数改进:

package hello;

public class CashCard {
    String number;
    int balance,bonus;

    public CashCard(String number, int balance, int bonus) {
        // TODO 自动生成的构造函数存根
        this.number=number;
        this.balance=balance;
        this.bonus=bonus;
    }

}
package hello;

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

        CashCard card1=new CashCard("A001", 1000, 0);
        CashCard card2=new CashCard("A002", 500, 0);
        CashCard card3=new CashCard("A003", 300, 0);
        CashCard card4=new CashCard("A004", 900, 0);

        //如果没有构造函数只能通过下面的代码实现。
//      CashCard card1=new CashCard();
//      card1.number="A001";
//      card1.balance=1000;
//      card1.bonus=0;


    }

}

构造函数是与类同名的方法,不用声明返回类型。这里构造函数number,balance,bonus参数与类中number,balance,bonus同名,加上this关键字,表示将参数值指定给这个对象的number,balance,bonus数据成员。
如果建立多个对象可以直接使用数组

CashCard[] cards= {
                new CashCard("A001", 100, 0),
                new CashCard("A002", 500, 0),
                new CashCard("A003", 300, 0),
                new CashCard("A004", 900, 0),
        };
        for(CashCard card:cards) {
            System.out.printf("%s%d%d\n", card.number, card.balance,card.bonus);
        }
Scanner scan= new Scanner(System.in);

        int money=scan.nextInt();
        CashCard card1=new CashCard("A001", 1000, 0);
        CashCard card2=new CashCard("A002", 500, 0);
        CashCard card3=new CashCard("A003", 300, 0);
        CashCard card4=new CashCard("A004", 900, 0);

        if(money>0) {
            card1.balance+=money;
            if(money>=1000) {
                card1.bonus++;//下面即是流程的封装
    void save(int money) {//存钱调用
        if(money>0) {
            this.balance+=money;
            if(money>=1000) {
                this.bonus++;
            }
        }else {
            System.out.println("error");
        }
    }

代码重复可以构建函数:

//下面即是流程的封装
    void save(int money) {//存钱调用
        if(money>0) {
            this.balance+=money;
            if(money>=1000) {
                this.bonus++;
            }
        }else {
            System.out.println("error");
        }
    }
    void charge(int money) {//取钱调用
        if(money<0) {
            if(money<this.balance) {
                this.balance-=money;
            }else {
            System.out.println("钱不够");
            }
        }else {
            System.out.println("error");
        }
    }
    int exchange(int bones) {//兑换红利
        if(bonus>0) {
            this.bonus-=bonus;
        }
        return this.bonus;
    }

    void output(){
        System.out.printf("%s%d%d",this.number,this.balance,this.bonus);

    }

其中exchange必须返回剩余点数。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值