面向对象
Java 是面向对象的编程语言,我们生活中绝大多数事物,都有三大基本特性:
- 封装:把具有普遍特性事物的数据和操作进行归类,如ATM就是用来取钱的,那么就将取钱操作写到ATM类中,就叫封装了。
- 继承:科技在发展社会在进步,原来归类的事物数据和功能越来越多,我们就将新的功能在原基础上扩展,就叫继承。如果你不扩展也可以,重新封装一下就行,只是人生苦短何必浪费时间。
- 多态:简单的理解为单对象有多种形态,如叶子,在春天是嫩绿、夏天是深绿、秋天是金黄、冬天就=null了;总不能没个季度的叶子都封装一次吧,原则上没问题,可是有点不符合逻辑啊,对吧,都他妈是叶子,我干嘛还要单独写四个,不是闲得蛋疼嘛。
有了以上三种特性,我们就可也开开心心的找对象了。
那你就错了
小心!开发的时候还有五大原则:
- 单一职责原则:每一个类应该专注于做一件事情。提高类的可读性,提高系统的可维护性,内容不要太多太杂,不然不利于维护。
- 开放封闭原则: 一个类是可扩展的,而不可修改的。你可以在原功能之上扩展新的功能,但是你不能给我把原有的方法给改了。抽象编程,而不是具体编程。
- 里氏替换原则:超类存在的地方,子类必须能够替换其父类。不能随便去继承不合适的,有多余方法或者属性的类。子类可以扩展父类的功能,但不能改变父类原有的功能。
- 依赖倒置原则:一个类,不应该强制依赖另一个类,每个类对于另外一个类都是可替换的。实现尽量依赖抽象,不依赖具体实现。
- 接口分离原则:应当为客户端提供尽可能小的单独的接口,而不是提供大的总的接口。实际编程中需要注意大小的度,不能太小也不能太大。
遵循了以上原则的代码,才能已于维护;按照原则来才有时间找女朋友。
对象设计
既然是搞面向对象编程,咋们就来搞一个对象。以提款机为例,定义类,抽象现实中的自动取款机(ATM)。
暂定以下标志性属性和功能:
- 属性:取款机内的现金值
- 功能1:取款时验证是否有足够的现金
- 功能2:有足够的现金时进行取款并扣除取款机内的现金值
//取款机类
class myATM{
//私有的现金变量,元
private int ATMCash=0;
//构造函数
public void ATM(){
}
//初始化提款机金额
public void init(int cash){
ATMCash=cash;
}
//检查提取金额
private boolean checkCash(int takeCash){
return (ATMCash>takeCash);
}
//取现
public void tacke(int takeCash){
if(checkCash(takeCash)){
ATMCash = ATMCash - takeCash;
System.out.println("成功提取现金"+takeCash+"元。");
System.out.println("本ATM剩余现金"+ATMCash+"元。");
}else{
System.out.println("本ATM现金不足,取钱失败!");
}
}
}
跑一下
import java.util.Scanner;
public class ATM{
public static void main(String [] args){
myATM A = new myATM(); //创建一个ATM对象
A.init(500); //初始化ATM内的现金值
Scanner scan = new Scanner(System.in);
System.out.println("请输入取款金额:");
int takeCash = scan.nextInt(); //获取取款金额
A.tacke(takeCash); //取款
}
}
控制台运行效果: