一、如何在一个类中创建另外一个类的对象,然后用这个类的对象的引用来访问这个对象里面的成员,如下:
//如何在一个类中创建另外一个类的对象,然后用这个类的对象的引用来访问这个对象里面的成员 Car bm = new Car(); bm.setYear(1949); System.out.println(bm.getYear());
二、为什么我们要用私有修饰符来修饰变量,然后通过get和set方法来访问?
通过get和set这种间接的方式来访问私有变量,其实是用到了java中的“封装”。
隐藏实现细节,对外提供公共的访问方式,私有的成员变量,比如make只能在Car类中被直接访问,而其它的类,比如ClassDemo只能通过set和get方式来调用访问,这样做的目的是为了安全,同时通过set和get方法来访问能够做判断,如果在传值的时候传入的是非法值,set判断后就不会允许成功赋值,举例如下(对年份进行判断):
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) { if(year>1990) { this.year = year; }else { System.out.println("年份无效"); } } }
在ClassDemo类中调用:
Car bm = new Car(); bm.setYear(1997); System.out.println(bm.getYear());
结果:
传入的值大于“1990”则显示传入的值,否则显示为“年份无效”并显示默认值“0”(这就是私有权限时使用set能够方便进行判断)
三、封装:是面向对象的重要法则,就是把对象的属性和行为结合为一个独立的整体,并尽可能隐藏对象的内部实现细节。
四、凡是访问了对象里数据的方法,都有this的引用,只是当变量名重名时才显式的写出了加以区分。