> 文档中心 > Java基础篇 第6节 类和对象 封装_实例化_构造方法_重载

Java基础篇 第6节 类和对象 封装_实例化_构造方法_重载

文章目录

  • 类和对象
    • 什么是类?什么是对象?
    • 具体实现
    • 创建对象
    • 三种变量
    • 访问实例变量和方法
    • 构造方法
    • 重载

类和对象

什么是类?什么是对象?


  •   类是一个模板,它描述一类对象的行为和状态。可以把类看作一群具有相似点的模板,如动物就是一个类,他可以实例化出来狗、鸡、羊、牛等对象。
  • 对象
      对象是你的女朋友!嘿嘿。对象是类的一个实例,有状态和行为。例如,一条狗是一个对象,它的状态有:颜色、名字、品种;行为有:摇尾巴、叫、吃等。

  举个例子,车就是一个类,具体的品牌车如大众、比亚迪等就可以看作是车的一个实例化对象,而这些对象有自己的颜色,价格和型号。
Java基础篇 第6节 类和对象 封装_实例化_构造方法_重载

具体实现

我们定义一个类为动物Dog,他可以叫,可以吃,可以跑

// 那么我们定义的类如下class Dog{String name;  // 名字String color; // 颜色int age;      // 年龄// 跑void run(){System.out.println(this.name + "在奔跑");}// 叫void sound(){System.out.println(this.name + "在汪~汪~汪叫");}// 吃void eat(){System.out.println(this.name + "在吃饭");}// 名字void name(){System.out.println(this.name);}}

Dog类种定义了三个属性和一些方法,现在我们需要实例化一个对象才能够调用这些方法和属性。

public class Main{public static void main(String[] args) { // 实例化一个Dog对象 Dog dog = new Dog(); // 设置对象的属性值 dog.name = "小狗"; dog.color = "黑"; dog.age = 18; // 调用对象的方法 dog.name(); dog.run(); dog.eat(); dog.sound();    }}
  • 运行结果
    Java基础篇 第6节 类和对象 封装_实例化_构造方法_重载

这里的方法和属性都不是静态的,所以需要通过对象的引用来调用。

创建对象

对象是根据类创建的。在Java中,使用关键字 new 来创建一个新的对象。创建对象需要以下三步:

  1. 声明:声明一个对象,包括对象名称和对象类型。
  2. 实例化:使用关键字 new 来创建一个对象。
  3. 初始化:使用 new 创建对象时,会调用构造方法初始化对象。
Dog dog = new Dog();

三种变量

一个类可以包含以下类型变量:

  • 局部变量:在方法、构造方法或者语句块中定义的变量被称为局部变量。变量声明和初始化都是在方法中,方法结束后,变量就会自动销毁。
  • 成员变量:成员变量是定义在类中,方法体之外的变量。这种变量在创建对象的时候实例化。成员变量可以被类中方法、构造方法和特定类的语句块访问。
  • 类变量:类变量也声明在类中,方法体之外,但必须声明为 static 类型。

一个类可以拥有多个属性、多个方法,在上面的例子中:eat()、run()、sound() 和 name() 都是 Dog 类的方法。name,color,age都是Dog类的属性。

访问实例变量和方法

通过对象的引用.属性名称或者方法名称进行调用。方法名称是需要加上所调用的参数的。

  • 访问实例变量
dog.name;dog.age;
  • 访问方法
dog.eat();

构造方法

定义:在一个类中,方法名和类名相同且没有返回值类型的方法。是用来进行对象的初始化时调用。

  每个类都最少有一个构造方法,虽然在我们平时没有进行显式声明,但是任然可以进行对象的实例化,就比如我们前面Dog类的实例化,这是为什么呢?
  这是因为,在编译阶段,如果编译器发现一个类没有定义构造方法,那么编译器就会默认生成一个无参的构造方法。
  使用编译器(javac)编译我们上面的Dog类,查看他编译后的文件如下:
Java基础篇 第6节 类和对象 封装_实例化_构造方法_重载
  这个是我们编译后的字节码文件,我们并没有在类种声明构造方法,这里却有一个无参构造方法,这就是编译器帮我们生成的。

  我们说的一个类中最少有一个构造方法,但是构造方法的名称需要和类名一致,我们怎么定义多个构造方法呢?这里我们需要引入一个新的知识点,方法的重载

重载

  定义:方法名和返回值类型相同时,方法的参数列表不同。

class Dog{String name;  // 名字String color; // 颜色int age;      // 年龄// 无参构造方法Dog(){}// 有一个参数的构造方法Dog(int num){this.age = num;}}

  这里的两个方法名是相同的,但是参数列表不同,我们把这种就叫做方法的重载。
  因为这里是构造方法,所以没有返回值,我们在普通方法的定义中使用重载,还需要保持返回值类型相同。