Day13 - 面向对象进阶

Day13

今日内容

  • 复习回顾

  • static关键字

  • 继承

第一章 复习回顾

1.1 如何定义类

类的定义格式如下:

修饰符 class 类名 {
    // 1.成员变量(属性)
    // 2.成员方法 (行为) 
    // 3.构造方法 (初始化类的对象数据的)
}

例如:

public class Student {
    // 1.成员变量
    public String name ;
    public char sex ; // '男'  '女'
    public int age;
}

🔹 理论理解
类是面向对象编程(OOP)的基本单位,用来封装数据(属性)操作(方法)。类的定义提供了对象的模板,是构建复杂系统时的最小组织单元。

🔹 企业实战理解

  • 阿里巴巴、字节跳动:严格遵循“一类一文件”,类名必须与文件名一致,便于代码管理。

  • Google Android:大量使用“POJO类”(Plain Old Java Object),定义清晰简单的实体类,提高项目维护性。

1.2 如何通过类创建对象

类名 对象名称 = new 类名();

例如:

Student stu = new Student();

🔹 理论理解
对象是类的实例,通过new关键字调用构造方法来创建,内存中会分配空间,并返回该对象的引用。

🔹 企业实战理解

  • 阿里:内部框架(如Dubbo)大量使用工厂模式单例模式来控制对象创建,避免滥用new导致内存管理混乱。

  • OpenAI:在大型分布式系统中,通常不会直接new对象,而是交给依赖注入框架(如Spring容器)管理实例的生命周期。

 

1.3 封装

1.3.1 封装的步骤

1.使用 private 关键字来修饰成员变量。

2.使用public修饰getter和setter方法。

1.3.2 封装的步骤实现
  1. private修饰成员变量

public class Student {
    private String name;
    private int age;
}
  1. public修饰getter和setter方法

public class Student {
    private String name;
    private int age;
​
    public void setName(String n) {
        name = n;
    }
​
    public String getName() {
        return name;
    }
​
    public void setAge(int a) {
        if (a > 0 && a <200) {
            age = a;
        } else {
            System.out.println("年龄非法!");
        }
    }
​
    public int getAge() {
        return age;
    }
}

🔹 理论理解
封装是OOP三大特性之一(封装、继承、多态),通过访问控制隐藏数据细节,仅暴露必要接口,保护对象的完整性和安全性。

🔹 企业实战理解

  • 字节跳动:所有成员变量必须private,提供getter/setter,且setter需要增加参数合法性校验(防止脏数据)。

  • NVIDIA AI引擎:内部对象经常只有gettersetter(只读属性),进一步保护系统核心状态不被篡改。

1.4 构造方法

1.4.1 构造方法的作用

在创建对象的时候,给成员变量进行初始化。

初始化即赋值的意思。

1.4.2 构造方法的格式

修饰符 类名(形参列表) {
    // 构造体代码,执行代码
}

1.4.3 构造方法的应用

首先定义一个学生类,代码如下:

public class Student {
    // 1.成员变量
    public String name;
    public int age;
​
    // 2.构造方法
    public Student() {
        System.out.println("无参数构造方法被调用");
    }
}

接下来通过调用构造方法得到两个学生对象。

public class CreateStu02 {
    public static void main(String[] args) {
        // 创建一个学生对象
        // 类名 变量名称 = new 类名();
        Student s1 = new Student();
        // 使用对象访问成员变量,赋值
        s1.name = "张三";
        s1.age = 20 ;
​
        // 使用对象访问成员变量 输出值
        System.out.println(s1.name);
        System.out.println(s1.age); 
​
        Student s2 = new Student();
        // 使用对象访问成员变量 赋值
        s2.name = "李四";
        s2.age = 18 ;
        System.out.println(s2.name);
        System.out.println(s2.age);
    }
}

🔹 理论理解
构造方法用于在对象创建时完成初始化。如果不显式声明构造方法,Java会自动提供一个默认的无参构造方法。

🔹 企业实战理解

  • Google:推荐使用Builder模式来代替多参数构造器(尤其是超过3个参数时),提高代码可读性。

  • OpenAI API封装:对象实例通常通过静态工厂方法代替new直接调用,便于扩展和版本升级。

1.5 this关键字的作用

1.5.1 this关键字的作用

this代表所在类的当前对象的引用(地址值),即代表当前对象。

1.5.2 this关键字的应用

1.5.2.1 用于普通的gettter与setter方法

this出现在实例方法中,谁调用这个方法(哪个对象调用这个方法),this就代表谁(this就代表哪个对象)。

public class Student {
    private String name;
    private int age;
​
    public void setName(String name) {
        this.name = name;
    }
​
    public String getName() {
        return name;
    }
​
    public void setAge(int age) {
        if (age > 0 && age < 200) {
            this.age = age;
        } else {
            System.out.println("年龄非法!");
        }
    }
​
    public int getAge() {
        return age;
    }
}
1.5.2.2 用于构造方法中

this出现在构造方法中,代表构造方法正在初始化的那个对象。

public class Student {
    private String name;
    private int age;
    
    // 无参数构造方法
    public Student() {} 
    
    // 有参数构造方法
    public Student(String name,int age) {
        this.name = name;
        this.age = age; 
    }
}

🔹 理论理解
this代表当前对象自身,用于区分成员变量和局部变量同名冲突,以及在构造器链中调用其他构造方法。

🔹 企业实战理解

  • 阿里Java开发手册:要求在setter方法中,所有赋值必须带this,提升可读性并减少维护出错风险。

  • Google内部编码规范:鼓励构造器中使用this()调用其他构造方法,减少重复代码。

  • OpenAI GPT模型对象构建:初始化过程中大量使用this精确指定对象内部状态,避免因传参混淆导致推理错误。

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夏驰和徐策

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值