Java的封装

xiaoxiao2021-02-28  21

何谓封装

定义类并不等于做好了面向对象中封装(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必须返回剩余点数。

转载请注明原文地址: https://www.6miu.com/read-2628715.html

最新回复(0)