初尝类定义
public class TextBox {
public String text;
public void setText(String text){
this.text = text;
}
public void clear(){
this.text=""; // text="";
}
}
这里的
clear
方法,由于没有形参,不存在歧义,所以可以不用this.
,即注释中的形式。tips:
在python中这样可是不行的哟,一定要加上self.
。
在Java10之后已经支持
var
了,即可以动态识别类型,但是在一些情况下不可以使用。
封装
是一个区别面向对象和面向过程编程的基本要素。
当要计算一个员工工资的时候,如果直接在main方法中,将运算过程平铺直叙的写出来,就是面向过程的。
当事先定义了一个类之后,通过实例化和调用对象中的计算方法,则是一种面向对象的编程模式。
**Employee.java**
public class Employee {
public int baseSalary;
public int hourlyRate;
public int calculateWage(int extraHours) {
return baseSalary + (hourlyRate * extraHours);
}
}
**Main.java**
public class Main {
public static void main(String[] args){
var employee = new Employee();
employee.hourlyRate=20;
employee.baseSalary=1000;
int wage = employee.calculateWage(10);
System.out.println(wage);
}
}
getter&setter
可以通过IDEA进行快速的定义,当指针放在变量名上之后,摁下ALT+ENTER
,就会发现IDEA的智能提示,beautiful。然后,根据提示快速创建getter,setter
创建之后,再个性化定义其中的逻辑。
``java
public class Employee {
private int baseSalary;
private int hourlyRate;
public int calculateWage(int extraHours) {
return getBaseSalary() + (getHourlyRate() * extraHours);
}
public int getBaseSalary() {
return baseSalary;
}
public void setBaseSalary(int baseSalary) {
if(baseSalary<=0)
throw new IllegalArgumentException("基础工资应为正数。");
this.baseSalary = baseSalary;
}
public int getHourlyRate() {
return hourlyRate;
}
public void setHourlyRate(int hourlyRate) {
if(hourlyRate<=0)
throw new IllegalArgumentException("工作时长应为正数。");
this.hourlyRate = hourlyRate;
}
}
## 降低耦合
通过对类外不需要的函数进行声明私有,降低对外接口数量,同时降低bug出现时的修改难度。
public-->private
## 构造器
对员工类进行构造,并且通过setter初始化私有变量。
```java
public Employee(int baseSalary, int hourlyRate){
setBaseSalary(baseSalary);
setHourlyRate(hourlyRate);
}
这里的权限声明为public,或者不写,或者protected,均可使用,(但是理论上应该用哪个,犹未可知)。
安全重构
在IDEA中,如果要将一个函数,安全转移到另一个类中(或者一个新的类中),可以通过Refactor
中的move...
进行操作。