三大特性:封装、继承、多态 
封装

什么是封装

设为私有属性  报错了 
公共访问方法 可以添加两个方法,来访问私有对象  并且,可以在方法做一些限制,让输入的数据保持合法   
set和get方法的快速生成快捷键
将实例变量变为私有 
Alt + shift + s   自动生成 
封装总结

综合案例实现
 1、创建用户类
创建实例 
创建无参构造方法和带参构造方法 
创建set和get方法 
2.创建银行类 == 是比较内存地址是否相同,equals 是比较内存地址上面的值是否相同
package com.zyy.fourth;
import java.util.Scanner;
public class Bank {
private User[] users = new User[5];
private int size;
public void initial() {
User user1 = new User();
user1.setCardNo("6333000123");
user1.setIdentity("5000431");
user1.setUsername("张三");
user1.setPassword("123456");
user1.setPhone("3456123");
user1.setBalance(10000);
User user2 = new User("6333000752", "5000900", "李四", "632134", "7824619", 20000);
users[size++] = user1;
users[size++] = user2;
}
public Bank() {
initial();
System.out.println("用户初始化完成");
}
public void login() {
Scanner input = new Scanner(System.in);
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) {
showMinu(u);
}else {
System.out.println("卡号或密码错误...");
}
}
public void showMinu(User u) {
Scanner input = new Scanner(System.in);
do {
System.out.println("================欢迎进入xxx银行=====" + u.getUsername() + "==========");
System.out.println("===1.存款 2.取款 3.转账 4.查询余额 5.修改密码 0.退出===");
System.out.println("请输入要操作的选项: ");
int choice = input.nextInt();
switch (choice) {
case 1:
this.save(u);
break;
case 2:
this.withDrow(u);
break;
case 3:
this.trans(u);
break;
case 4:
this.printBalance(u);
break;
case 5:
this.modifyPassword(u);
break;
case 0:
return;
default:
break;
}
} while (true);
}
public void save(User u) {
Scanner input = new Scanner(System.in);
System.out.println("请输入要存钱的金额: ");
double m = input.nextDouble();
if(m > 0) {
u.setBalance(u.getBalance() + m);
System.out.println("存钱成功 余额: " + u.getBalance());
}
else {
System.out.println("存钱失败");
}
}
public void withDrow(User u) {
Scanner input = new Scanner(System.in);
System.out.println("请输入要取钱的金额: ");
double m = input.nextDouble();
if(m > 0 && m <= u.getBalance()) {
u.setBalance(u.getBalance() - m);
System.out.println("取钱成功 余额: " + u.getBalance());
}
else {
System.out.println("取钱失败");
}
}
public void trans(User u) {
User toUser = null;
Scanner input = new Scanner(System.in);
System.out.println("请输入对方的卡号: ");
String cardOn = input.next();
for (int i = 0; i < size; i++) {
if(users[i].getCardNo().equals(cardOn)) {
toUser = users[i];
break;
}
}
if(toUser != null) {
System.out.println("请输入要转账的金额: ");
double m = input.nextDouble();
if(m <= u.getBalance()) {
u.setBalance(u.getBalance() - m);
toUser.setBalance(toUser.getBalance() + m);
System.out.println("转账成功");
}
else {
System.out.println("金额有误");
}
}
else {
System.out.println("没有该用户");
}
}
public void printBalance(User u) {
System.out.println("余额为: " + u.getBalance());
}
public void modifyPassword(User u) {
Scanner input = new Scanner(System.in);
System.out.println("请输入要修改的密码: ");
String password = input.next();
if(password.length() == 6) {
u.setPassword(password);
}
else {
System.out.println("输入密码有误");
}
}
}
继承

父类的选择与抽取


父类抽取案例
以上图为例 狗狗类 
鸟类 
鱼类 
蛇类 
父类–动物类 我们会发现,这几种类都有相同的实例变量和方法,因此,我们可以整合起来,创建一个父类 
此时,将狗、鸟、鱼、蛇类继承父类–动物类 将与父类重复的内容删掉 
  
比如狗继承动物,动物继承生物,那么狗就有生物的属性和方法 
不可继承的部分

访问修饰符

public-公开  
protected-保护     什么都不加,实例变量属性默认是protected   private-私有  
方法的覆盖
 
    快速添加重写 直接输入父类的方法名   不遵循重写规则,就会报错 
super的使用方法1
     加上super  
super访问属性    
子类对象的创建过程
 
   先构造父类 A,然后构造子类B 
super的使用方法2
super调用父类的无参构造方法 super();必须是第一句,系统自动加上   super调用父类的带参构造方法 
 
 
this与super的区别

多态
多态的概念

   
多态的方法覆盖

 使用的是子类的方法 
多态的应用
 场景1      如果我有更多的动物,这样写实在是太累了,因此,我们就可以用Animal父类来代替这些子类   
应用场景2   
向上转型 与 向下转型
向上转型(装箱) 
向下转型(拆箱) 

类型转换异常与instanceof关键字

 没有转型成真正原来的类型    
多态总结

|