目录
面向对象的特性(上)
1.1 概述
1.2 封装性
1.2.1 概述
1.2.2 权限访问修饰符
1.2.3 封装性在java当中的体现
1.2.3.1 封装方式
1.2.3.2 注意事项:
1.2.4 封装的优点
1.2.5 this关键字
1.2.5.1 this关键字的用法
1.2.5.2 注意事项
1.3 构造方法
1.3.1 概述
1.3.2 格式
1.3.3 注意事项
1.3.4 一个标准的类通常要拥有下面四个组成部分
1.3.5 自动生成代码
1.3.5.1 通过快捷键生成
1.3.5.2 通过菜单生成
1.4 综合案例
面向对象的三大特征:封装性、继承性、多态性。面试过程中经常会问到,划重点。
将对象的属性和行为看做一个整体,放在独立模块中,比如:类;把不想对外公开的实现细节隐藏起来,可以使用private修饰将其私有化,向外暴露public方法,保证调用者安全访问。
为了更好的理解封装性,首先要对权限访问的关键字有一个了解。在 Java 中,有四种访问修饰符,可以使用这些访问修饰符来控制类、方法、变量的可见性和访问权限。分别为:
访问权限从小到大排序:private < (缺省) < protected < public
修饰符 | 同一个类 | 同一个包 | 不同包子类 | 完全公开 |
---|---|---|---|---|
private | √ | |||
(缺省) | √ | √ | ||
protected | √ | √ | √ | |
public | √ | √ | √ | √ |
注:√表示当前修饰符可以访问的权限。
1.如果属性被private修饰,必须在本类中提供getter/setter方法供外界进行间接访问。
setter:给属性赋值,不能有返回值,参数类型必须和成员变量类型一致。
getter:获取属性值,不能有参数,返回值类型必须和成员变量类型一致。
2.对于boolean类型的属性,getter方法一定要写成isXxx的形式,setter方法规则不变setXxx。
/**
* 性别
*/
private boolean sex;
public boolean isSex() {
return sex;
}
public void setSex(boolean sex) {
this.sex = sex;
}
3.对于非boolean类型的属性,getter/setter命名规则建议强制定义为set/get成员变量名第一个字母大写,后面小写。
/**
* 姓名
*/
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
当方法的局部变量和类的成员变量重名的时候,根据“就近原则”,优先使用局部变量。如果需要访问本类当中的成员变量,需要使用格式:this.成员变量名,“谁调用的方法,谁就是this,this即代表当前对象”。
public Student(String name, int age, boolean sex) {
this(name,age); //调用一个参数的构造方法,必须写在第一行
this.sex = sex; //访问本类的成员变量
this.eat(); //访问本类的成员方法
}
this(…)调用必须是构造函数体中的第一条语句,且唯一;下图将该语句放在第二行会编译报错。
构造方法是专门用来创建对象的方法,当我们通过关键字new来创建对象时,其实就是在调用构造方法。
无参构造方法:
public 类名称(){
}
有参构造方法:
public 类名称(参数类型 参数名){
}
在我们日常开发中,getter/setter方法以及构造方法不需要我们手动写,在IDEA集成开发环境中可以自动生成。
通过快捷键Alt+Insert,在弹出的标签中选择下图中的选项,然后按Ctrl+A全选所有属性,点击OK就可以了。
步骤一:封装一个学生类,属性包含:姓名、年龄、性别,用private修饰;并提供属性对应public修饰的getter/setter方法;一个无参构造方法;一个有参构造方法。
public class Student {
/**
* 姓名
*/
private String name;
/**
* 年龄
*/
private int age;
/**
* 性别
*/
private boolean sex;
public Student(){
}
public Student(String name, int age) {
this.name = name;
this.age = age;
}
public Student(String name, int age, boolean sex) {
this(name,age);
this.sex = sex;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public boolean isSex() {
return sex;
}
public void setSex(boolean sex) {
this.sex = sex;
}
}
步骤二:定义一个测试类,实例化对象,通过get/set方法访问属性,然后打印输出。
public class StudentTest {
public static void main(String[] args) {
//创建对象,调用的其实是无参构造方法
Student student = new Student();
student.setName("张飒");
student.setAge(20);
System.out.println("姓名:"+student.getName()+",年龄:"+student.getAge() );
System.out.println("======================");
//创建对象,调用的是三个参数的有参构造方法
Student student1 = new Student("李斯",30,true);
System.out.println("姓名:"+student1.getName()+",年龄:"+student1.getAge()+",性别:"+(student1.isSex()?"男":"女"));
System.out.println("======================");
//通过成员方法修改年龄属性
student1.setAge(31);
System.out.println("姓名:"+student1.getName()+",年龄:"+student1.getAge() );
}
}
输出结果:
题外话:
如果文章中存在错误的地方,欢迎大家指正出来,共同学习进步,后续会陆续就JAVA这门课程展开进行分享。