【JAVA语言-第7话】面向对象的封装性、继承性、多态性,构造方法,this和super关键字(上)

目录

面向对象的特性(上)

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 综合案例


面向对象的特性(上)

1.1 概述

        面向对象的三大特征:封装性、继承性、多态性。面试过程中经常会问到,划重点。

1.2  封装性

1.2.1 概述

         将对象的属性和行为看做一个整体,放在独立模块中,比如:类;把不想对外公开的实现细节隐藏起来,可以使用private修饰将其私有化,向外暴露public方法,保证调用者安全访问。

1.2.2 权限访问修饰符

        为了更好的理解封装性,首先要对权限访问的关键字有一个了解。在 Java 中,有四种访问修饰符,可以使用这些访问修饰符来控制类、方法、变量的可见性和访问权限。分别为:

  • public:公共的,可以被任何代码访问。
  • protected:受保护的,在同一个包内或者子类(只要是子类,同包不同包都可以被访问)。
  • (缺省):就是默认不写,在同一个包内可以被访问。
  • private:私有的,只能在本类的内部访问。 

访问权限从小到大排序:private < (缺省) < protected < public

修饰符 同一个类 同一个包 不同包子类 完全公开
private
(缺省)
protected
public

注:√表示当前修饰符可以访问的权限。

1.2.3 封装性在java当中的体现

1.2.3.1 封装方式
  1.  方法是一种封装,将特定功能代码封装在一个方法中。
  2. 关键字private也是一种封装,一旦被private修饰的属性和方法,那只能在本类当中才可以访问;超过本类访问会编译报错。 
1.2.3.2 注意事项:

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;
    }

1.2.4 封装的优点

  • ​ 有效防止调用者随意修改系统属性;
  • ​ 把特定的功能封装起来,提高功能的重用性
  • 降低功能组件之间的耦合性,即一个模块的实现细节发生改变,只要保证对外暴露的接口或者方法不变,就不会影响其他调用者。

 1.2.5 this关键字

        当方法的局部变量和类的成员变量重名的时候,根据“就近原则”,优先使用局部变量。如果需要访问本类当中的成员变量,需要使用格式:this.成员变量名,“谁调用的方法,谁就是this,this即代表当前对象”。

1.2.5.1 this关键字的用法
  •  在本类的成员方法中,访问本类的成员变量:this.成员变量名;
  •  在本类的成员方法中,访问本类的成员方法:this.成员方法名;
  • 在本类的构造方法中,访问本类的另一个构造方法:this(…);
    public Student(String name, int age, boolean sex) {
        this(name,age); //调用一个参数的构造方法,必须写在第一行
        this.sex = sex; //访问本类的成员变量
        this.eat(); //访问本类的成员方法
    }
1.2.5.2 注意事项

        this(…)调用必须是构造函数体中的第一条语句,且唯一;下图将该语句放在第二行会编译报错。

​​​​​​​【JAVA语言-第7话】面向对象的封装性、继承性、多态性,构造方法,this和super关键字(上)_第1张图片

1.3 构造方法

1.3.1 概述

        构造方法是专门用来创建对象的方法,当我们通过关键字new来创建对象时,其实就是在调用构造方法。 

1.3.2 格式

无参构造方法:

        public 类名称(){

        }

        

有参构造方法:

        public 类名称(参数类型 参数名){

        }

【JAVA语言-第7话】面向对象的封装性、继承性、多态性,构造方法,this和super关键字(上)_第2张图片

1.3.3 注意事项

  • 构造方法的名称必须和所在的类名称完全一样,就连大小写也要一样。
  •  构造方法不要写返回值类型,连void都不写。
  • 构造方法不能return一个具体的返回值。
  • 如果没有编写任何构造方法,那么编译器就会默认赠送一个无参构造方法,没有参数、方法体,什么事情都不做,创建对象的时候会被调用。
  • 一旦编写了至少一个构造方法,那么编译器赠送的无参构造方法就会自动消失,所以如果显式的写了有参构造,最好再显式的写一个无参构造方法
  • 构造方法也是可以进行重载的,重载:方法名称相同,参数列表不同。

1.3.4 一个标准的类通常要拥有下面四个组成部分 

  • 所有的成员变量都要使用private关键字修饰。
  • 为每一个成员变量编写一对Getter/Setter方法。
  • 编写一个无参构造方法。
  • 编写一个全参构造方法。

1.3.5 自动生成代码

        在我们日常开发中,getter/setter方法以及构造方法不需要我们手动写,在IDEA集成开发环境中可以自动生成。

1.3.5.1 通过快捷键生成 

        通过快捷键Alt+Insert,在弹出的标签中选择下图中的选项,然后按Ctrl+A全选所有属性,点击OK就可以了。

【JAVA语言-第7话】面向对象的封装性、继承性、多态性,构造方法,this和super关键字(上)_第3张图片

1.3.5.2 通过菜单生成
  • Getter/Setter: Code->Generate->Getters and Setters->选中所有变量
  • 无参构造:Code->Generate->Constructor->SelectNone
  • 有参构造:Code->Generate->Constructor->选中所有变量

 1.4 综合案例

步骤一:封装一个学生类,属性包含:姓名、年龄、性别,用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语言-第7话】面向对象的封装性、继承性、多态性,构造方法,this和super关键字(上)_第4张图片 

         

题外话:

        如果文章中存在错误的地方,欢迎大家指正出来,共同学习进步,后续会陆续就JAVA这门课程展开进行分享。

你可能感兴趣的:(JAVA语言,java,开发语言)