面向对象的理解

面向对象的理解

什么是类?什么是对象?

概念说明类比
类(Class)模板、图纸,定义了事物的属性和行为汽车设计图纸
对象(Object)类的实例,根据类创建出来的具体个体根据图纸造出来的具体一辆车

面向过程 vs 面向对象

面向过程写法:

public static void main(String[] args) {
    int age = 19;
    String name = "唐伯虎";
    String local = "苏州";
    showInfo(name, age, local);

    int age2 = 20;
    String name2 = "祝枝山";
    String local2 = "苏州";
    showInfo(name2, age2, local2);
}

public static void showInfo(String name, int age, String local) {
    System.out.println("姓名:" + name);
    System.out.println("年龄:" + age);
    System.out.println("籍贯:" + local);
}Code language: JavaScript (javascript)

面向过程的问题:

弊端说明
缺乏对数据的封装每个学生的数据分散为多个独立变量,没有统一管理
数据和方法分离数据(age、name)和操作数据的方法(showInfo)是独立的,没有归属关系

面向对象写法:

class Person {
    // 属性(成员变量)
    int age;
    String name;
    String local;

    // 行为(方法)
    void showInfo() {
        System.out.println("姓名:" + name);
        System.out.println("年龄:" + age);
        System.out.println("籍贯:" + local);
    }
}

public class Test {
    public static void main(String[] args) {
        Person s = new Person();
        s.age = 12;
        s.name = "张三";
        s.local = "杭州";
        s.showInfo();

        Person s2 = new Person();
        s2.age = 13;
        s2.name = "李四";
        s2.local = "杭州";
        s2.showInfo();
    }
}Code language: JavaScript (javascript)

如何创建类

class 类名 {
    // 成员变量(属性)
    // 成员方法(行为)
}Code language: JavaScript (javascript)
class Person {
    int age;
    String name;
    String local;

    void showInfo() {
        System.out.println("姓名:" + name);
        System.out.println("年龄:" + age);
        System.out.println("籍贯:" + local);
    }
}Code language: JavaScript (javascript)

如何创建对象

使用 new 关键字创建对象:

类名 对象名 = new 类名();
Person p = new Person();Code language: JavaScript (javascript)

对象的成员及访问方式

成员类型访问方式示例
成员变量对象名.变量名p.age = 18;
成员方法对象名.方法名()p.showInfo();
Person p = new Person();
p.age = 18;           // 访问成员变量
p.name = "王五";      // 访问成员变量
p.showInfo();         // 调用成员方法Code language: JavaScript (javascript)

数据类型的演进

阶段类型特点
基本数据类型int、double 等只能装一个值
数组int[]、String[] 等只能装同类型的多个值
自定义类Person、Student 等想装什么就装什么,整合数据和方法

面向对象的核心特点

特点说明
封装将数据和行为封装在一个类中,形成一个整体
数据归属数据属于对象本身,方法操作的是对象自己的数据
可复用一个类可以创建多个对象,每个对象独立
可扩展可以在类中随时添加新属性和新方法

多个对象的内存关系

Person s1 = new Person(); // 在堆中创建第一个 Person 对象
Person s2 = new Person(); // 在堆中创建第二个 Person 对象Code language: JavaScript (javascript)
对象内存数据
s1堆中对象 Aage=12, name="张三", local="杭州"
s2堆中对象 Bage=13, name="李四", local="杭州"

s1 和 s2 是两个独立的对象,互不影响。修改 s1.age 不会改变 s2.age。

总结

面向对象的最大特点就是可以封装一种新的类型出来,这种类型整合了数据和方法。然后通过这个自定义类型可以创建更多的变量(对象),每个对象都有自己的数据和行为。

发表回复

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