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关键字:

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

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

修饰类:类不可被继承

相关推荐
查古穆4 小时前
栈-有效的括号
java·数据结构·算法
kyriewen114 小时前
你点的“刷新”是假刷新?前端路由的瞒天过海术
开发语言·前端·javascript·ecmascript·html5
Java面试题总结5 小时前
Spring - Bean 生命周期
java·spring·rpc
硅基诗人5 小时前
每日一道面试题 10:synchronized 与 ReentrantLock 的核心区别及生产环境如何选型?
java
014-code5 小时前
String.intern() 到底干了什么
java·开发语言·面试
421!5 小时前
GPIO工作原理以及核心
开发语言·单片机·嵌入式硬件·学习
摇滚侠5 小时前
JAVA 项目教程《苍穹外卖-12》,微信小程序项目,前后端分离,从开发到部署
java·开发语言·vue.js·node.js
楚国的小隐士5 小时前
为什么说Rust是对自闭症谱系人士友好的编程语言?
java·rust·编程·对比·自闭症·自闭症谱系障碍·神经多样性
@insist1236 小时前
网络工程师-生成树协议(STP/RSTP/MSTP)核心原理与应用
服务器·开发语言·网络工程师·软考·软件水平考试
春花秋月夏海冬雪6 小时前
代码随想录刷题 - 贪心Part1
java·算法·贪心·代码随想录