Java|对象和封装

蝶儿导读
本文介绍了Java 面向对象编程中的核心概念,包括类与对象的基本定义及其初始化方式。通过构造方法可为对象设置初始值,并支持重载以适应不同参数需求。文章重点阐述了封装机制,即通过将属性设为 `private` 并提供公共的`getter` 和 `setter` 方法,实现对属性访问的控制,从而确保数据的合法性和安全性。
— 此摘要由蝶儿创作,她也可能会犯错。

对象和类

对象和类是 Java 和绝大多数编程语言的面向对象编程基础。简要来说,对于现实或虚拟中的实体,一个类(英文:Class)可以定义一个实体,类下面有若干属性,用来从各方面描述这个实体。

类下面的属性有 PublicPrivate 两种,其中 Public 可以被类内和类外的任意方法(英文:Method)调用,而 Private 属性则只能由类内和子类的方法调用。

对象初始化

类下可以创建对象(英文:Object):

Person p = new Person();
Java

此过程又被称为对象初始化,对象具有具体的属性值

Human furina = new Human();
furina.name = "Furina";
furina.sex = "女";
furina.age = 500;
Java
构造方法

使用构造方法(英文:Constructor)时注意,构造方法是无返回的方法

class Person {
  public Human(){
    name = "traveler";
    sex = "女";
    age = 10000;
    System.out.println("已执行:构造方法");
  }
}
Java

对于该种构造方法的补充:即当将来其他地方进行新的对象初始化时,把新对象的成员变量(英文:member variable)设为这些初始值:

Human kamisato_ayaka = new Human();
Java

此时即使没有进行对象属性的初始化,则默认会将构造方法中填充的初始值赋值到这个新对象上。

构造方法具有隐含变量 this,它指向「当前正在被构造的对象」。因此构造方法的完整写法为:

class Person {
  public Human(){
    this.name = "traveler";
    this.sex = "女";
    this.age = 10000;
    System.out.println("已执行:构造方法");
  }
}
Java

其中的 this 在常规写法中通常被省略。

无参构造方法

一般情况下,如果没有定义构造方法,则系统会提供无参构造方法:

class Person{
  public Human(){
  
  }
}
Java
构造方法重载

方法重载(英文:Method Reload)具有以下特点:

  • 方法名相同
  • 参数数据类型或参数个数不同
  • 与返回值、访问修饰符无关

例如以下两个构造方法可被看作方法重载:

public Human() {
  name = "traveler";
  sex = "女";
  age = 10000;
  love = 80;
}
Java
public Human(String name, String sex, int age, int love) {
  this.name = name;   //名字
  this.sex = sex;     //性别
  this.age = age;     //年龄
  this.love = love;   //好感度
}
Java
构造方法重载调用

以上一部分提到的方法重载构造方法为例,则构造方法重载的调用如下实现:

traveler = new Human();
traveler.print();
furina = new Human("芙宁娜", "女", 500, 100);
furina.print();
Java

封装

封装用来解决类的属性可以被随意访问和随意赋值的问题。例如:

Human furina = new Human();
furina.love = -1000;
Java

此时 love 属性值可以明显发现不合法invalid)。Java 的封装正是为了解决此种问题而诞生。

封装会将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过类提供的方法来实现对这些隐藏信息的操作和访问。

使用封装需要以下步骤来实现:

  1. 将属性的可见性设为 private(私有的)
  2. 在属性所属的类中创建公有的 getter / setter 方法,用于对隐藏属性的读写操作
  3. getter / setter 方法中加入属性控制语句,对属性值的合法性进行判断

例如在下面的代码中:

class Human {
  private String name = "芙宁娜";
  private String sex = "女";
  private int love = 50;
  pricate int age = 500;
  
  public int getLove() {
    return love;
  }
  
  public void setLove (int love) {
    if (love > 100 || love < 0) {
      this.love = 50;
      System.out.println("好感度 应该属于 值 的 0 - 100 ");
    } else {
      this.love = love;
  }
  
  //... other getter / setter method
}
Java

public int getLove() 就是一个 getter 方法;对应的,public int setLove 就是一个 setter 方法。

留下评论

您的邮箱地址不会被公开。 必填项已用 * 标注