面向对象
一、自定义类
public class 类名{
修饰符 数据类型 变量名 = 值;
修饰符 返回值类型 方法名(参数列表){
...
}
}
public class Person{
private String name = "tom";
public String setName(String name){
this.name = name;
}
}
-
使用private修饰符,外部就无法直接操作类中成员变量
-
可以通过在类中定义方法,
setXXX()
,getXXX()
来设置、获取成员变量 -
public
方法定义的属性,外部可以直接访问。 -
private
方法不允许外部调用 -
可以使用一个隐含的变量
this
,它始终指向当前实例。因此,通过this.field
就可以访问当前实例的字段。如果没有命名冲突,可以省略
this
二、构造方法
构造方法是如此特殊,所以构造方法的名称就是类名。构造方法的参数没有限制,在方法内部,也可以编写任意语句。但是,和普通方法相比,构造方法没有返回值(也没有void
),调用构造方法,必须用new
操作符。
注意:
- 在未自定义构造方法时,自动创建构造默认方法
public 类名(){}
,并调用该构造方法 - 一旦自定义了构造方法,就不会创建默认构造方法
- 可以定义多个构造方法,编译器根据参数自动判断调用哪一个构造方法
- 可以在一个构造方法内部调用另一个构造方法,
this(参数列表)
public class Person{
private String name; // 引用类型的字段默认是null
private int age; // 数值类型的字段用默认值
// 由于自定义了有参构造方法,编译器不会自动创建无参构造方法,所以必须手动创建无参构造方法
public Person(){
}
// 构造方法,方法名和类名相同。在new对象的时候,为对象赋初始值
public Person(String name, int age){
this.name = name;
this.age = age;
}
// 构造方法间的互相调用
public Person(String name){
this(name,18)
}
}
public class Main{
public static void main(String[] args){
Person p1 = new Person(); // 调用无参构造方法,初始化成员变量
Person p2 = new Person('tom',18); // 调用有参构造方法,初始化成员变量
}
}
创建对象实例所干事情
- 先初始化字段,例如,
int age = 10;
表示字段初始化为10
,double salary;
表示字段默认初始化为0
,String name;
表示引用类型字段默认初始化为null
; - 执行构造方法的代码进行初始化。
三、方法重载
定义多个方法时,如果它们的功能都是类似的,只有参数有所不同,那么,可以把这一组方法名做成同名方法,
这种方法名相同,但各自的参数不同,称为方法重载。
public class Person{
public void eat(){
System.out.print("吃饭")
}
public void eat(String food){
System.out.print("吃" + food)
}
}