使用工具 IntelliJ IDEA Community Edition 2023.1.4
使用语言 Java
1.面向对象设计
1.1 面向对象基本概念
在现实世界中万,事万物皆为对象,这些对象有自己的特征(属性)和行为(方法);
各式各样的且具有相同特征和行为的对象组合在一起可以归结为一个类;
对象是类的实例(具体),类是对象的模版;
对象是按照类的模版造的;
1.1.1 方法的定义
[访问修饰符] <返回值类型> <方法名>([参数列表]){}
1.1.2 属性的定义
在Java中属性就等于变量
<数据类型> <变量名>[=值];
1.1.3 设计类时需要遵循的原则
属性和方法是为了解决业务问题设置的;
关注主要属性和方法;
如果没有必要,不要添加额外的类,方法,属性;
1.2 面向对象设计基本步骤
第一步:发现需求,归纳出类;
第二步:发现类的属性(就是特征);
第三步:发现类的方法(就是类拥有的行为);
1.3 类图
在实际开发中BOOS常常会给一些类图,你要学会观看类图,例
AppleTree |
+ str:String |
-print():void |
在以上类图中,最顶部的格子代表了类名,下面的首先是属性,后面的是方法在方法和属性前面,一般可以看见一个'+'号或'-',又或者'#',这个代表访问修饰符,'+'号代表public(公共的),'-'号代表private(私有的),"#"号代表protected(受保护的),访问修饰符我放在后面进行讲解,而这个符号后面跟着的就是变量名或方法名了,最后在变量的':'后面的就是变量类型,而在方法后面的就是返回值。
1.4 构造方法
1.4.1 构造方法的语法
[访问修饰符] <方法名>([参数列表]){}
1.4.2 构造方法的作用与讲解
创建构造方法在idea可以直接右键点生成,然后里面的构造函数,最后选择变量就行了(不过新手建议手打)
在Java中通过自定义类的构造方法执行一些类的初始化操作,比如给成员变量赋初始值等,构造方法的名称必须和类名相同,但是没有返回值类型,创建构造方法的作用是在类实例化的时候可以直接执行某段代码
如果定义了一个有参构造方法,那想要直接实例不传递参数可以使用那就再加一个无参构造方法就可以,系统默认给了一个无参构造方法,所已直接实例化不会编译错误,但是如果显式定义了一个或多个构造方法,Java就不会自动添加默认构造方法。
1.5 方法重载
1.5.1 方法重载的定义
方法重载指的是同一个类包含两个或两个以上的方法,它们的方法名相同,方法参数的个数和参数类型不同,成员方法和构造方法都可以用来重载,像我们打印输出的println()方法就使用了重载;我们可以按着Ctrl键点击println()方法就可以跳转进去查看;
1.5.2 方法重载的特点(要求)
1.必须在同一个类中;
2.方法名相同;
3.参数列表(方法参数的个数或参数类型)不相同;
1.5.3 方法重载的使用和优点
方法重载是对原有方法的一种升级,可以根据参数的不同,采用不同的实现方法,而且不需要编写多个名称,简化了类调用的代码。
2.使用封装重构类的属性和方法
封装是面向对象设计的三大特性之一,还有两种分别是继承和多态,我会在后面的文章进行讲解,你们的点赞就是我的动力,请给我点点赞吧
2.1 封装的概念
封装的好处在于隐藏内部的细节,让用户只能通过开发人员规定方法访问数据,可以方便加入访问修饰符来限制不合理操作,大大提高了代码的复用性和安全性。
封装反映了事务的相对独立性,有效避免了外部错误对此对象的影响,并且对用户由于大意产生的错误操作起到预防作用。
封装是面向对象的三大特性之一,就是将类的状态信息隐藏在类内部,不允许外部程序直接访问,而通过该类提供的方法实现实现对隐藏信息的操作和访问
2.2 封装的步骤
2.2.1 手动实现封装的步骤
1.修改属性的可见性属性来限制对属性的访问
2.为每个属性创建一对赋值(setter)方法和取值(getter)方法,用于对这些属性的存取
3.在赋值方法中可以添加对属性的存取控制语句
2.2.2 自动实现封装的步骤
idea提供了快捷添加getter()方法和setter()方法的操作,即在类中右击,选择"生成"选项,选择要添加的方法(取值方法、赋值方法或取值和赋值方法),之后选择要产生取值或赋值的字段,单击"ok"按钮即可在类中自动生成相关方法
3.类和类成员的访问控制(访问修饰符)
3.1 类的访问修饰符
public | 同一包中可以使用 | 非同一包中可以使用 |
默认修饰符 | 同一包中可以使用 | 非同一包中不可以使用 |
3.2 类成员的访问修饰符
private | 同一类中可以使用 | 同一包中不可以使用 | 子类中不可以使用 | 外部包不可以使用 |
默认修饰符 | 同一类中可以使用 | 同一包中可以使用 | 子类中不可以使用 | 外部包不可以使用 |
protected | 同一类中可以使用 | 同一包中可以使用 | 子类中可以使用 | 外部包不可以使用 |
public | 同一类中可以使用 | 同一包中可以使用 | 子类中可以使用 | 外部包可以使用 |