封装,this,构造方法,四种访问权限,super
- java封装
- 封装(Encapsulation)是面向对象方法的重要原则,就是把对象的属性和操作(或服务)结合为一个独立的整体,并尽可能隐藏对象的内部实现细节。
- 在java中用d代码实现,也就是把成员变量私有化,使用公开的方法去访问(在方法中我们可以添加一些限制),从而可提高数据的安全性,有效性(getXXX访问,setXXX改变)
- this
- this关键字指向的是当前对象的引用(简单讲就是谁指它就指向谁),this() 代表的是当前类的构造方法里面可以写参数也可以不写(这就看自己的构造方法了)
- this 的作用 通常用于解决成员变量与局部变量重名的问题
- 构造方法
- 构造方法用于创建实例化对象
- 构造方法中可拥 0,1,2,3…个参数,当然构造方法也可以有多个,只要参数类型不同就好
- java中所有的类都是继承的object类(在object类中有一个无参构造方法),所以当我们创建一个类之后,就算什么都不写也是可以调用无参构造方法的。
- 语法:public 类名(){} //无参构造方法
- java中的四种访问修饰符
- 访问修饰符可修饰类 ,成员变量,方法
本类 | 同包 | 子类 | 其他包 | |
---|---|---|---|---|
public | √ | √ | √ | √ |
protect | √ | √ | √ | × |
default | √ | √ | × | × |
private | √ | × | × | × |
- public: java中访问权限最宽的修饰符(公有的),被它修饰的类、属性以及方法不仅可以跨类访问,而且允许跨包(package)访问。
- private: java中权限最小的修饰符(私有的)。被它修饰的类、属性以及方法只能被该类的对象访问,其子类不能访问,更不能允许跨包访问。
- protect: 介于public 和 private 之间的一种访问修饰符(保护形)。被它修饰的类、属性以及方法只能被类本身的方法及子类访问,即使子类在不同的包中也可以访问。
- default:即不加任何访问修饰符(默认访问模式)。该模式下,只允许在同一个包中进行访问。
- super
- super 与 this 非常相似 this 是代表的是本类,而super代表的是父类
- super可以点出父类非私有的方法与属性
- super()代表的是父类的无参构造方法 ,当然里面也能写参数(调用的就是父类的有参构造),注意super() 只能放在 子类的构造方法中的第一行,不然就会报语法错误
接下来就是我们的代码实现了
public class Teacher{ // 老师类
private String name;
private int age;
private String major;
// 上面的三个属性都是私有的(外部是不能访问的,现在我们可以写几个公开的方法来访问)
// 这个get方法用于 返回 这个对象的属性
public String getName(){
return this.name;
//this.name 指向的当前的引用对象(这里this不写也没关系,因为我们上面讲了 this是用来解决属性与
//局部变量重名的问题,这里没有重名所以不用也是可以的)
}
// 这个set方法用于 给我们的name属性赋值
public void setName(String name){
// 当然我们也能在这里面添加一点逻辑判断,只有符合了才给我们的属性赋值,
//这样就可以确保我们属性数值的有效性
this.name = name;
//这里就需要使用到 this 了因为我们的属性已经和这方法的参数重名了 this.name 代表的是我们的属性
//name 在这方法里面代表的是这个方法的参数
}
public int getAge(){
return age;
}
public void setAge(int age){
this.age = age;
}
public int getMajor(){
return major;
}
public void setMajor(int major){
this.major = major;
}
}
以上的使用公开方法访问私有的属性 就是我们的属性封装了,以及this的使用
public class Teacher{ // 老师类
private String name;
private int age;
private String major;
// 构造方法的访问修饰符通常都是 public 因为我们的对象本来就是给别人访问的,如果你写个私有的,,,
//额那么是不是就没意义了
public Teacher(){
}
public Teacher(String name , int age , major){
this.name = name;
this.age = age;
this.major = major;
}
}
注意当我们自己写了一个构造方法后 原先的无参构造方法就没用了
因为在我们java中 所有的类是继承与object类的 当我们的子类重写了父类的方法,那么父类原先的方法就会被子类的给取代