目录
面向对象的三大特性:封装,继承与多态。
封装
强调的是保护性与易用性。
什么是封装:对外屏蔽类内部一些实现细节,类的外部只能通过类提供的方法操作类。
将数据和操作数据的方法进行结合,隐藏对象的属性和实现细节,对外部提供公开的方法进行交互。
如何实现封装:通过类结构以及访问修饰符来实现封装性。
四大访问修饰符:
private(私有权限,类内部权限)<default(包访问权限,包内部可见)<protected(继承权限)<public(公开的,所有对象可见)
一、public访问修饰符
当访问修饰符使用public在当前项目中任何地方都可以调动public权限的域(类、属性和方法)。
二、private访问修饰符
1、修饰属性
成为私有属性,这些属性只在当前类的内部可见,对外部不可见。
public class BankCard {
private int cardNum;//卡号
private String password;//密码
private double balance;//余额
public int test;//测试
}
例如在BankCard类中, 定义了三个私有属性和一个公开属性,在另一个类中只能访问公开属性,不能访问私有属性。私有属性对其他类完全隐藏。
2、getter和setter
当属性被private封装后,类中需要提供getter和setter方法来控制私有属性被外部访问,类的外部通过访问这两种方法来使用私用属性。
阿里编码规约:类中成员变量没有特殊情况,统一使用private进行封装,合理提供getter和setter方法。
getter是取得私有属性。
public BankCard(int cardNum, String password) {
this.cardNum = cardNum;
this.password = password;
}
public int getCardNum(){
return cardNum;
}
public double getBalance() {
Scanner sc = new Scanner(System.in);
System.out.println("请输入您的账户密码:");
String pass = sc.nextLine();
if(pass.equals(this.password)){
System.out.println("正在查询您账户的余额");
return this.balance;
}
System.out.println("密码错误!");
return -1;
}
public class Test {
public static void main(String[] args) {
BankCard bankCard = new BankCard(12345,"123dgn");
System.out.println(bankCard.getCardNum());
System.out.println(bankCard.getBalance());
}
}
创建bankCard对象赋予账号12345密码“123dgn”,然后获得卡号并且输出,然后取得该用户的私有属性余额,至于输入正确的密码才能获得余额输出。
setter是修改私有属性。
public void setPassword() {
Scanner sc = new Scanner(System.in);
System.out.println("请输入您的旧密码:");
String oldPass = sc.nextLine();
if(oldPass.equals(this.password)){
System.out.println("请输入您的新密码:");
String newPass = sc.nextLine();
this.password = newPass;
System.out.println("密码修改成功");
}else{
System.out.println("密码错误!");
}
}
public String getPassword() {
int num = 123456;
Scanner sc = new Scanner(System.in);
System.out.println("请输入您的验证码:");
int number = sc.nextInt();
if(number==num){
return this.password;
}
return "验证码错误!";
}
public class Test {
public static void main(String[] args) {
BankCard bankCard = new BankCard(12345,"123dgn");
System.out.println(bankCard.getPassword());
bankCard.setPassword();
}
}
同样创建bankCard对象赋予账号12345密码“123dgn”,通过getPas