Java应用基础 Day3

目录

面向对象

类和对象

对象内存结构

封装

过程式编程

封装

Getter和Setter

降低耦合

构造方法

继承和多态

继承

父子构造

方法的覆写(重写)

Final关键字


面向对象

编程范式:

1)过程式编程

2)函数式编程

3)面向对象编程

4)响应式编程

5)并发编程

6面向切面编程


类和对象

类(class) 是描述一类事物的模板,而**对象(object)**则是这根据类这个模板创建的具体实例。

创建对象语法:类型 变量名 = new 类型();


对象内存结构

对象需要在堆内存申请空间,存储数据 对象的变量在栈内存,存储的是对象在堆中的地址引用,所以也叫引用数据类型。

注意事项:

把一个对象变量赋值给另一个变量,会导致两个变量持有同一个对象的引用。使用任意变量修改对象属性,会导致另一个变量访问到的属性跟着变化


封装

过程式编程

面向过程编程有哪些问题?

所有代码写在一个类中,非常臃肿

方法的参数可能非常多,不方便维护

代码冗长,不方便定位BUG

代码之间耦合严重,修改代码会造成连锁反应

代码复用性差

java 复制代码
public class SalaryDemo {
    public static void main(String[] args) {
        // 基础薪资
        double baseSalary = 5000.0;
        // 奖金
        double bonus = 1000.0;
        // 绩效评级
        char grade = 'C';
        // 计算最终薪资
        double salary = calculateSalary(
		  baseSalary, bonus, grade);
        
        System.out.println("基础薪资: " + baseSalary);
    }

    private static double calculateSalary(
	double baseSalary,
	double bonus,
	char grade) {
        // 计算绩效系数
        double rate = calculateRate(grade);
        // 计算最终薪资
        return baseSalary + bonus * rate;
    }

    private static double calculateRate(char grade) {
        return switch (grade) {
            case 'A' -> 1.0;
            case 'B' -> 0.8;
            case 'C' -> 0.6;
            case 'D' -> 0.4;
            default -> 0.0;
        };
    }
}

封装

是面向对象的核心特点之一,要求将数据和操作这些数据的方法捆绑在一起,作为一个整体。

封装后为:


Getter和Setter

通常情况下,类中的属性(成员变量)不应该被直接操作(不应该人工赋值),而是提供setter方法用于修改类中的数据,提供getter方法用于访问类中的数据。

很显然人工复赋值的时候会有错误产生。

我们应该先用private关键字将属性进行私有化,然后创建一个可以对外访问的方法,我们叫Set方法

set方法负责给成员变量赋值,必要的时候可以做校验

get可以获取值

封装的细节:

类中的成员变量应该用private修饰

提供setter和getter方法用来操作类中的成员变量
当方法参数与类中字段名一致时,可以用this.变量名来区分成员变量和方法参数


降低耦合

耦合(Coupling)是指事物之间存在相互依赖、相互影响、相互制约的情况。在程序设计中是指一个类依赖于另一个类的程度。

构造方法

构造方法(Constructor)是在创建对象时调用的方法,作用是在创建对象时初始化对象中的字段(Field)。

复制代码
/*  默认构造方法,空参构造方法
    不需要写返回值,返回值其实就是当前类对象
    方法名就是当前类名
    构造方法的作用:就是给成员变量完成初始化
    空参构造,会给成员变量默认的初始值(数字默认为0,布尔默认为false)
    */

总结:

什么是封装?

封装是面向对象的三大特征之一,简单来说就是把数据和操作数据的方法放到一起

封装的目的是为了降低耦合,提高程序的可维护性、可复用性

如何实现封装?

把数据和操作数据的方法放到一个类中,作为类的成员变量成员方法

成员变量私有化,对外提供Getter和Setter方法操作成员变量

对于必须初始化的成员变量,以构造方法来接收参数完成初始化

隐藏不必要的细节,只对外暴露必要的方法

set方法仍然有用,可以进行校验逻辑


继承和多态

继承

在程序设计中,继承是指让一个类继承另一个类的成员,从而提高代码的复用性。

案例:

商品分为实体商品(苹果)和虚拟商品(网盘会员),每个商品都有名称和价格。

创建一个商品类为父类,再创建一个类为实体商品类继承。

通过测试类发现,都可以实现调用

调用时会发现有这些方法并不是我们定义的,这些是jdk中自带的,当一个类没有继承任何类的时候会默认继承Object类

当我们手动继承,再按住ctrl跟进,就能看到里边的方法了

按ctrl+f12就能看到object类中所有方法

总结

什么是继承?

一个类继承另一个类,就可以访问被继承类的非私有成员。

被继承的类叫父类,继承父类的类是子类。

Java中用extends关键字实现继承。

继承有什么特点?

Java中只能单继承,也就是一个人只能有一个爸爸

Java中可以多重继承,也就是爸爸还可以有爸爸

Java中有一个顶级父类,叫做Object


父子构造

构造方法作用:初始化成员变量。

super();存在的意义:

由于父类中变量都为private私有,子类无法调用,所以采用super()的方式才能调用到父类中的成员变量

执行顺序如下

通过有参构造实现调用子类的方法时不会调用父类的方法。

内存模型

创建对象要基于类的模版进行创建

元空间用于存放类的模板


方法的覆写(重写)

覆写(Override)也叫重写,是指子类定义了一个与父类中声明完全相同,但实现不同的方法。子类的实现就覆盖了父类的实现。

案例:

商品分为实体商品(苹果)和虚拟商品(网盘会员),每个商品都有名称和价格。

创建一个商品类为父类,再创建一个类为实体商品类继承。

实体商品有重量虚拟商品没有重量,多了一个秘钥属性

Final关键字

我们发现objec中有些方法是无法重写的,因为他们都被final关键字修饰了。

总结:

什么是方法覆写

覆写也叫重写(override),是指子类定义了一个与父类中声明完全相同,但实现不同的方法。子类的实现就覆盖了父类的实现。

覆写父类方法时可以在方法上添加@Override标识,编译器会做覆写检查

方法覆写的作用:

在父类方法基础上拓展子类特有的功能

Final关键字:

修饰变量:变量的值不可修改,就成为常量。常量名一般全都大写,单词之间以_隔开.

修饰方法:方法不可被覆写

修饰类:类不可被继承

相关推荐
笨蛋不要掉眼泪1 小时前
从零构建微服务网关:Spring Cloud Gateway 核心原理与实战配置详解
java·微服务·云原生·架构
南部余额2 小时前
Apache POI 从入门到实战:Excel 与 Word操作攻略
java·word·excel·poi
java1234_小锋2 小时前
Java高频面试题:怎么实现Redis的高可用?
java·开发语言·redis
笨蛋不要掉眼泪2 小时前
Spring Cloud Gateway 核心实战:断言(Predicate)的长短写法与自定义工厂详解
java·前端·微服务·架构
A懿轩A2 小时前
【Maven 构建工具】Maven + JUnit5 单元测试实战:测试级别、注解、断言与 Maven test 阶段
java·单元测试·maven
Coder_Boy_2 小时前
以厨房连锁故事为引,梳理Java后端全技术脉络(JVM到云原生,总结篇)
java·jvm·spring boot·分布式·spring·云原生
Zhu_S W2 小时前
Docker 完全指南:Java 开发者的容器化实践
java·docker·容器
闲人编程2 小时前
聚合管道与复杂查询
开发语言·oracle·lua·match·查询·聚合·lookup
Zhu_S W2 小时前
EasyExcel动态表头详解
java·linux·windows