一 类与对象
什么是类?
简单来说,类就是类别的意思,用class表示。
面向对象编程,万物皆可编程 ,在程序中表示一个事物时,往往回因为事物的复杂
导致编程的代码非常的复杂。
或者更深层次的理解,你创建一个类,你就是创建了一个新的,专属于你的数据类型。
class Human{
int age;
boolean gender;
int height;
int weight;
//等等等等......
}
以及它所能进行的方法,比如List有add,remove等,我们也可以给类里写上方法。
class Human{
int age;
boolean gender;
int height;
int weight;
//等等等等......
void walk(){};
void jump(){};
void eat(){};
void speak(){};
//等等等等......
}
接下来我们要做的,就是往里面填入这些类的内容所具体的对应。
什么是对象?
对象就是具体的事物、具体存在的程序中。
对象指代一个事物在计算机中映射的数据体 存在于内存中。
Human John = new Human();
John.age = 20;
John.gender = "Male";
John.height = 180;
John.weight = 78;
John.walk();
John.jump();
类与对象的关系?
类是对象的模板,对象是类的实例。类定义了对象的属性和方法,对象则是类的具体表现。类和对象相互依赖,共同构成面向对象编程的基础。
二 类与对象的语法
语法: public class 类名{ }
类名/类文件名: 首字母大写,多个单词拼接,每个单词首字母大写 -> 驼峰命名法
方法/变量名: 首字母小写,多个单词拼接,每个单词首字母大写 -> 小驼峰命名法
偶尔使用的局部变量 循环中计数等等可以使用字母 或者小写或者缩写
一个类中需要定义什么内容,能变成一个可以符合面向对象变成的复合型数据类型
类别的来源 -> 共性
通过分析事物之间是否具备相同的/相似的 属性 特征 行为 功能 ... 来划分类别
所以我们定义类时,也需要找到 这个类别对应事物都有哪些数据 特征 行为 功
能 等
然后使用代码把这些内容定义在类中,实现复合型数据类型的组成。
三 封装
构造部分:类在创建对象时会调用的内容,初始化部分
构造方法:
格式: 类名为方法名、没有返回值结构 public 类名(){ }
特性:
1:每个类都默认自带一个隐式的空参数构造方法
2:每个类都可以自定义构造方法
3:每个类一旦显式的定义了构造方法,隐式的就会被覆盖,不管是否
带参数
4:一个类可以定义多个构造方法,但是每个方法的参数必须不一致
(方法重载)
5: 类在创建对象时只能调用构造方法之一 ,取决于创建对象时的参数
6: 创建对象时调用、意味着构造方法可以在创建对象时初始化部分
成员属性:
变量: 初始化赋值之后可以修改值
常量: 初始化赋值之后不可以修改值
final 修饰变量,这个变量初始化赋值之后就不可以改变值
一个类中,面向对象部分分成员变量 如果使用final修饰为常量
并且也需要保证每个对象都有一个自己的常量,值是不同的,那么我们可
以在所有的构造方法/ 代码块中给常量进行初始化
访问权限修饰符: 作用于编译代码时,定义的内容可以使用的范围
public: 公开的 没有限制 整个项目中都可以使用
private: 私有的 只能本类中使用
protected: 受保护的,只能在本包中或者子类中使用 本地圈子 与 远房亲戚
缺省不写: 在本包中可以使用
可以使用访问权限修饰符的内容:
类:只能使用 public 与 缺省不写 这两种
public 修饰的类 是这个代码文件的主类,类名必须与所在文件名一致,一个文件中
就只能写一个public类
缺省不写修饰的类 是这个代码文件的普通类,类名可以随意,一个文件中可以写多
个普通类
封装的实现:
封:限制
对于属性和方法 ,如果不希望直接暴露在类的外面随意使用,我们可以在类中使用
符合要求的访问权限修饰符限制
装:打包 装配结构 set/get
通过方法来访问受限制的属性和方法
读: 取属性变量的值 可以使用带返回值的方法
public 数据类型 get属性名(){ return 属性变量;}
写: 给属性变量赋值
public void set属性名(数据类型 参数名){ 属性变量 = 参数名;}
封装的主要优点包括:
数据保护:封装可以保护对象的内部状态,通过限制对数据的直接访问,防止外部代码对对象内部数据的随意修改,从而避免数据的不一致性和错误。
信息隐藏:封装使得对象的内部实现细节对外部不可见,只暴露必要的接口,降低了模块之间的耦合度,提高了代码的可维护性和可扩展性。
简化接口:封装使得对象的使用更加简单,用户只需要关注对象提供的接口,而不需要关心内部的实现细节。
提高安全性:封装可以对数据进行验证和过滤,确保数据的合法性和安全性。
增强代码复用性:封装的对象可以被其他程序或模块复用,提高了代码的复用性和开发效率。
class Triple<T>{
private T first;
private T second;
private T third;
public Triple(T first, T second, T third) {
this.first = first;
this.second = second;
this.third = third;
}
public T getFirst() {
return first;
}
public void setFirst(T first) {
this.first = first;
}
public T getSecond() {
return second;
}
public void setSecond(T second) {
this.second = second;
}
public T getThird() {
return third;
}
public void setThird(T third) {
this.third = third;
}
public void printTriple(){
System.out.println(first + "\t" + second + "\t" + third);
}
}