一:面向对象的三大特征之一:封装 Encapsulation
//oop三大特征之一:封装
public class Encapsulation {
public static void main(String[] args) {
/*
封装:尽可能隐藏对象内部实现细节,控制对象的修改以及访问的权限
访问修饰符:private (可将属性修饰为私有,仅本类可见)
私有的属性是不被外界的访问,外界访问只能访问公用方法
这个时候只能提供公共的访问方法,以保证数据的正常输入
命名规范:
赋值:setXXX() //使用的方法参数是实现赋值
取值:getXXX() //使用方法返回值现实取值
get/set方法是外界访问对象私有属性的唯一通道,方法内部可对数据进行检测和过滤
*/
Student student = new Student();
student.name="李磊";
//student.age=100; 运行会有提示是私有化 java: age 在 com.javastudy04.Student 中是 private 访问控制
student.setAge(600); //在set方法中已经做了age的判断范围
student.sex="人妖";
student.score = 100.0;
student.sayHello();
}
}
class Student {
String name;
private int age;
String sex;
double score;
// private char gender; 私有属性在类的外部不可访问
public void sayHello(){
System.out.println(
"姓名:"+this.name+"\t"+
"年龄:"+this.age+"\t"+
"性别:"+this.sex+"\t"+
"成绩:"+this.score
);
}
public void setAge(int age){
if (age>0 && age<=120){ //判断了范围
this.age = age;
}else{
this.age = 18;
}
}
}
二:练习
public class Practice_01 {
public static void main(String[] args) {
/*
实现银行功能
用户输入正确的卡号和密码后取款以及一下操作
菜单如下:1、存款 2、取款 3、转账 4、查询余额 5、修改密码 0、退出
分析:
User:(cardNo、identity、username、password、phone、balance)
Bank类主要包含一下功能
初始化用户(initial)
用户登录(login)
显示菜单(shoeMenu)
存款(save)
取款(withdraw)
转帐(trans)
查询余额(query)
修改密码(modelPassword)
*/
//用户初始化
Bank bank = new Bank();
bank.initial();
bank.login();
}
}
//银行类
class Bank {
//把这些用户放到一个数组里面,保存用户数据
private User[] users = new User[5]; //放了五个数据,数组的长度是5
//保存数组里面的个数
private int size;
//用户输入
Scanner input = new Scanner(System.in);
//1、初始化方法
public void initial() {
//创建用户1
User user1 = new User();
user1.setCardNo("6565232135465123");
user1.setIdentity("87945665465");
user1.setUsername("小明");
user1.setPassword("123456");
user1.setPhone("123");
user1.setBalance(1000);
//创建用户2
User user2 = new User("98798535513221", "789456131", "小红", "0123", "130", 10000);
//将创建好的两个用户放入数组里面
users[0] = user1;
users[1] = user2;
size = 2; //长度成为2
System.out.println("用户初始化完成");
}
//2、用户登录
public void login() {
System.out.println("请输入卡号");
String cardNo = input.next();
System.out.println("请输入密码");
String password = input.next();
//遍历这个数组
User u = null; //保存这个找到的用户
for (int i = 0; i < size; i++) {
if (users[i].getCardNo().equals(cardNo) && users[i].getPassword().equals(password)) {
u = users[i];
break;
}
}
if (u != null) {
//显示菜单并登录成功
System.out.println("恭喜你登录成功");
this.shoeMenu(u);
} else {
System.out.println("你输入的密码错误");
}
}
//3、显示菜单
public void shoeMenu(User u) { //登录成功的用户传输过来然后进入页面
while (true) {
System.out.println("=====欢迎来到乐客银行=========" + u.getCardNo() + "============");
System.out.println("===1、存款 2、取款 3、转账 4、查询余额 5、修改密码 0、退出==");
int choice = input.nextInt(); //用户输入的数字
switch (choice) {
case 1:
this.Save(u);
break;
case 2:
this.withdraw(u);
break;
case 3:
this.trans(u);
break;
case 4:
this.query(u);
break;
case 5:
this.modelPassword(u);
break;
case 0:
return; //结束整个程序,之前有笔记,break结束本次循环
default:
System.out.println("你输入的有误请重新输入");
}
}
}
//4、存钱
public void Save(User u) { //登录进来传进来的这个人
System.out.println("请输入存款金额");
double m = input.nextDouble();
//判断存钱的数值是否大于0
if (m > 0) {
u.setBalance(u.getBalance() + m);
System.out.println("存钱成功" + u.getBalance());
} else {
System.out.println("存钱失败。请重新输入");
}
}
//5、取钱
public void withdraw(User u) {
System.out.println("请输入取款金额");
double m = input.nextDouble();
//判断取得钱数是否大于原来的钱数
if (0 < m) {
if (m < u.getBalance()) {
//double money = u.getBalance() - m;
u.setBalance(u.getBalance() - m); //取出来的钱,剩下的相当于在放进去
System.out.println("取钱成功" + u.getBalance());
} else {
System.out.println("余额不足");
}
} else {
System.out.println("你输入的金额有误");
}
}
//6、转账
public void trans(User u) {
System.out.println("请输入你要转账的账户");
String cardNo = input.next();
System.out.println("请输入转账金额");
double m = input.nextDouble();
//建立
User toUser = null; //判断对方卡号是否存在
for (int i = 0; i < size; size++) {
if (users[i].getCardNo().equals(cardNo)) {
toUser = users[i];
break;
}
}
//用户不为空
if (toUser != null) { //存在对方的卡号
if (u.getBalance() >= m) {
//转账
//扣钱
u.setBalance(u.getBalance()-m);
//加钱
toUser.setBalance(toUser.getBalance()+m);
System.out.println("恭喜你转账成功");
}else{
System.out.println("转账失败余额不足");
}
} else {
System.out.println("对不起你输入的卡号不存在,请重新输入");
}
}
//7、查询卡号
public void query(User u){
System.out.println(
"卡号:" + u.getCardNo() + "\t" +
"姓名:" + u.getUsername() + "\t" +
"余额:" + u.getBalance()
);
}
//8、修改密码
public void modelPassword (User u){
System.out.println("请输入你的密码");
String newPassword = input.next();
if (newPassword.length() == 6) {
u.setPassword(newPassword);
System.out.println("恭喜你修改密码成功");
} else {
System.out.println("你输入的密码长度不符合标准");
}
}
}
//用户类
class User {
private String cardNo; //卡号
private String identity; //身份证
private String username; //姓名
private String password; //密码
private String phone; //点话
private double balance; //余额
//无参构造方法
public User() {
}
//带参构造方法
public User(String cardNo, String identity, String username, String password, String phone, double balance) {
this.cardNo = cardNo;
this.identity = identity;
this.username = username;
this.password = password;
this.phone = phone;
this.balance = balance;
}
public String getCardNo() {
return cardNo;
}
public void setCardNo(String cardNo) {
this.cardNo = cardNo;
}
public String getIdentity() {
return identity;
}
public void setIdentity(String identity) {
this.identity = identity;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public double getBalance() {
return balance;
}
public void setBalance(double balance) {
this.balance = balance;
}
}