章节三、5-Getters-Setters和this关键字part01
我们新建第一个Car类:
package introduction; public class Car { //颜色 private String color; //生成商 private String make; //型号 private String model; //年份 private int year; //车拥有一个加速度的功能 public void run() { System.out.println("加速度了....."); } }
创建第二个类来对car类进行引用和实例化:
package introduction; public class ClassDemo { public static void main(String[] args) {
}
}
一、实例化对象:
package introduction; public class ClassDemo { public static void main(String[] args) { //创建car类型的对象时应该有一个car类型的引用来指向car对象 //new是一个创建对象的关键字 Car bmw = new Car(); } }
二、实例化后调用car类型中的行为(方法),格式为“实例化后的对象名.方法名”:
package introduction; public class ClassDemo { public static void main(String[] args) { //创建car类型的对象时应该有一个car类型的引用来指向car对象 //new是一个创建对象的关键字 Car bmw = new Car(); //实例化之后创建对这个对象的引用 bmw.acceleration(); } }
打印查看实例化后引用是否成功:
成功引用了car类中的方法
三、访问car类中的成员变量
1、由于car类中的 成员变量权限都是都是“私有的”,所以在其它类中,比如新建的第二个类ClassDemo无法直访问,如果强行调用的话,执行程序时会报错
2、如果是权限是公共的则能够直接访问(为了进行演示,我们暂时将生产商的权限由私有的变成公共的):
//生成商 public String make;
在ClassDemo中调用时与调用car类中的方法是一样的:
bmw.make = "法拉利";
3、由于成员变量权限为私有的,但你还是想调用它,那么在其它类调用时只能采取曲线救国的方式,如下:
我们在该类中写一个方法来接收其它类的传值,并且提供公共的外部访问方式,对私有的数据通过方法的方式来进行访问,也就是set、get方法。
首先写一个方法来接收该类中传进来的值(car类),
package introduction; public class Car { //颜色 private String color; //生成商 public String make; //型号 private String model; //年份 private int year; //车拥有一个加速度的功能 public void acceleration() { System.out.println("加速度了....."); } /* * 为了能够区分下面这段话,这里我们将表示生产商的make定义为make1,setMake中的make * 定义为make2,此处为了方便其它类调用,所以取名相同。 * 因为需要给make2这个变量赋值,但上面已经定义了make1是一个字符串类型的变量, * 所以这里同样需要一个字符串类型的变量来进行接收,也取名叫make2,方便给make2赋值, * 同时也方便调用者进行区分, * 如果在方法主体中写成make2=make2,那么表示的都是setMake中的参数列表的中make, * 这个make2是局部变量,make1是成员变量。 * 所以为了区分这两个make,就有了关键字this, * 使用格式为“this.”,使用了该关键字后就能够区分局部变量和成员变量, * 在成员变量前面加上this后变为“this.make=make” */ public void setMake(String make) { //哪个对象来调用setMake方法,这个this就给哪个对象里的成员变量赋值 this.make = make; } }
然后提供公共访问方式(get)package introduction;public class Car { //颜色
private String color; //生成商 public String make; //型号 private String model; //年份 private int year; //车拥有一个加速度的功能 public void acceleration() { System.out.println("加速度了....."); } /* * 为了能够区分下面这段话,这里我们将表示生产商的make定义为make1,setMake中的make * 定义为make2,此处为了方便其它类调用,所以取名相同。 * 因为需要给make2这个变量赋值,但上面已经定义了make1是一个字符串类型的变量, * 所以这里同样需要一个字符串类型的变量来进行接收,也取名叫make2,方便给make2赋值, * 同时也方便调用者进行区分, * 如果在方法主体中写成make2=make2,那么表示的都是setMake中的参数列表的中make, * 这个make2是局部变量,make1是成员变量。 * 所以为了区分这两个make,就有了关键字this, * 使用格式为“this.”,使用了该关键字后就能够区分局部变量和成员变量, * 在成员变量前面加上this后变为“this.make=make” */ public void setMake(String make) { //哪个对象来调用setMake方法,这个this就给哪个对象里的成员变量赋值 this.make = make; } //因为make是字符串类型,所以返回的make也是字符串类型
//get的目的是为了返回这个成员变量的值给调用者
public String getMake() { return this.make; } }
然后我们切换到ClassDemo类中调用set和get方法,查看访问私有权限的make变量是否成功:
package introduction; public class ClassDemo { public static void main(String[] args) { //1、实例化car Car bmw = new Car(); //2、调用set方法,对make变量进行赋值,赋值为“bmw” bmw.setMake("bmw"); //3、调用get方法,打印返回的值,查看调用访问是否成功 System.out.println(bmw.getMake()); } }
运行结果为:
在用eclipse工具编写java程序时,如果要使用到set和get方法,eclipse中能够自动创建get和set方法:
工具栏source—>Generate Getters and Setters…—>然后把私有成员都勾选上(已经写完get和set的私有变量不会出现在这里)—>Insertion point选项选择:After ‘getMake()’—>Sort by选项选择:Fields in getter/setter pairs(表示get和set方法成对出现)—>点击ok—>查看自动创建set和get方法是否成功。
package introduction; public class Car { //颜色 private String color; //生成商 public String make; //型号 private String model; //年份 private int year; //车拥有一个加速度的功能 public void acceleration() { System.out.println("加速度了....."); } /* * 为了能够区分下面这段话,这里我们将表示生产商的make定义为make1,setMake中的make * 定义为make2,此处为了方便其它类调用,所以取名相同。 * 因为需要给make2这个变量赋值,但上面已经定义了make1是一个字符串类型的变量, * 所以这里同样需要一个字符串类型的变量来进行接收,也取名叫make2,方便给make2赋值, * 同时也方便调用者进行区分, * 如果在方法主体中写成make2=make2,那么表示的都是setMake中的参数列表的中make, * 这个make2是局部变量,make1是成员变量。 * 所以为了区分这两个make,就有了关键字this, * 使用格式为“this.”,使用了该关键字后就能够区分局部变量和成员变量, * 在成员变量前面加上this后变为“this.make=make” */ public void setMake(String make) { //哪个对象来调用setMake方法,这个this就给哪个对象里的成员变量赋值 this.make = make; } //因为make是字符串类型,所以返回的make也是字符串类型, //get的目的是为了返回这个成员变量的值给调用者 public String getMake() { return this.make; } //创建成功 public String getColor() { return color; } public void setColor(String color) { this.color = color; } public String getModel() { return model; } public void setModel(String model) { this.model = model; } public int getYear() { return year; } public void setYear(int year) { this.year = year; } }
四、Object是java中所有类的父类。