类和对象
面向对象概述
两种程序设计方法
- 结构化程序设计,典型代表C。
- 面向对象程序设计( Object Oriented Programming,OOP ),典型代表Java, C++, Python。
面向过程与面向对象
- ⭐️面向过程:专注于如何去解决一个问题的过程,编程特点是用一个个函数去实现过程操作,没有类与对象的概念。
- ⭐️面向对象:专注于有哪一个对象实体去解决这个问题,编程特点是:出现了一个个的类,由类去生成对象。
- ⭐️对象(Object)
现实世界中,一个人、一辆汽车、一台电视机、一所学校,一次会议、一场足球比赛、一个账户等。 - 对象的两方面的特征:
- ⭐️静态特征: 描述对象的状态。
- ⭐️动态特征: 描述对象的行为。
- ⭐️对象的定义:是其自身所具有的状态特征及可以对这些状态施加的操作组合在一起所构成的实体。
面向对象基本概念
- ⭐️类(class)
例如人类、鱼类、交通工具类等。 - ⭐️类定义:具有相似特征和行为的对象的集合。
所有的事物都可以归到某类中。
例如,汽车属于交通工具类,手机属于通信工具类。 - ⭐️实例(instance)或对象
某个类的一个具体的对象称为该类的一个实例。
例如,我的汽车是汽车类的实例。面向对象的基本特征
- ⭐️封装性
对象是状态(属性)和行为(操作或方法)封装体。
例如,一辆汽车就是一个封装体。
实现信息隐藏,通过接口与外界通信。
- ⭐️继承性
继承是将一个 已有类中的属性和方法保留,加上自己特有的属性和方法,形成一个新类,这种技术叫做继承,子类继承父类。 - ⭐️多态性
多态指一个程序中同名的不同方法共存的情况。Java通过方法的重载
和方法覆盖
来实现多态。
通过方法的重载
,一个类中可以有多个具有相同名字的方法,但这些方法具有不同的参数个数或不同的参数类型。
通过方法覆盖
,子类可以重新实现父类的某些方法,使其具有自己的特征。
面向对象的优势及应用
1、易维护(maintainability)
在OOP中,类就是一个模块,并且可以继承。
2、可重用(resusability)
之前写好的代码可以被代码的创建者或其他人重用。
可使用语言本身提供类库或API(应用编程接口)。
3、可扩展(extensibility)
通过继承来实现功能扩展。
为对象定义类
[修饰符] class 类名 [extends 父类名] [implements 接口名]
{
1. 修饰符 类型 成员变量;
2. 构造方法
3. 修饰符 类型 成员方法(参数列表){
类型 局部变量;
方法体;
……}
}
类的修饰符:[public][abstract | final]
类的修饰符
类修饰符:public、abstract、final、缺省。
1️⃣public:说明这是一个公共类,可以被其它任何类引用和调用。
2️⃣缺省: 不写访问控制符,表示类只能被本包的其它类访问。
说明:同一个源程序文件中不能出现两个或者两个以上的公共类, 否则编译时系统会提示应将第二个公共类放在另一个文件中。
3️⃣抽象类abstract
以abstract作为关键字,如果有的话,应该放在访问控制符后面,表示这个类是个抽象类。抽象类不能直接产生实例化一个对象,它只能被继承。
例如:食品,可以理解为能够吃的东西,但谁也不会说明食品是什么样子,平时可能指的是饼干、水果等具体对象。对于食品这个概念,必须进行进一步分类,才能实例化,如苹果、西瓜等。
4️⃣最终类final
以final作为关键字,如果有的话,应该放在访问控制符后面,表示这个类是个最终类,也就是说最终类不能被继承,不能再派生出其它子类。
例如:String类
abstract和final不能同时修饰一个类,既是抽象类又是最终类的类没有意义。
成员变量
类的成员变量描述了该类的内部信息。
[修饰符] 变量类型 变量名 [=初值];
在定义类的成员变量时,可以同时赋初值,但对成员变量的操作只能放在方法中。
修饰符包括访问控制修饰符、静态修饰符static、最终说明符final。
成员变量的修饰符:[public | protected | private ] [static] [final]
成员变量-修饰符
1️⃣访问控制修饰符
访问控制修饰符包括4种类型:
private: 私有,此成员只能在类的内部使用。
默认(default/friendly) 也可以不写访问控制符,成员可被本包的其它类访问(包内友好)。
protected: 被保护,成员可被本包的所有类访问,也可以被子类访问(家庭成员)。
public: 公共,成员可被所有类访问 。
2️⃣静态修饰符static
用static声明的成员变量被视为类的成员变量,静态变量也称为类变量。没有static修饰的变量称为非静态变量,也称为实例变量。
3️⃣最终说明符final
用final声明的变量就是最终变量,即标识符常量,其值不可以改变。
如:final float PI=3.14 (一旦赋初值就不能改变)
构造方法⭐️
构造方法(constructor)是一种特殊的方法,它是在对象被创建时初始化对象的成员的方法。
构造方法的主要作用是对类对象的初始化工作。
构造方法的方法名与类名相同。
构造方法不能写返回值,也不能有void。
构造方法的返回值就是该类本身。
成员方法
类的方法是用来定义对类的成员变量进行操作的。
实现类内部功能的机制。
Java的方法必须定义在类的内部。
[修饰符] 返回值的数据类型 方法名(参数列表)
{
语句序列;
return [表达式];
}
方法的修饰符:[public | protected | private ] [static] [final | abstract]
成员方法-修饰符
1️⃣访问控制修饰符 (与成员变量相同)
2️⃣静态修饰符static
用static修饰的方法称为静态方法,也称为类方法。
没有static修饰的方法称为非静态方法,也称为实例方法。
3️⃣final 方法
用final声明的方法称为最终方法。它不能被子类覆盖, 即不能在子类中修改或者重新定义,但可以被子类继承,用于保护一些重要的方法不被修改。
4️⃣abstract方法
用abstract修饰的方法称为抽象方法。这种方法只有方法的声明,却没有方法体,它不能实现。只能被重写时,加上方法体后,才能产生对象。
抽象方法只能出现在抽象类中,含有抽象方法的类称为抽象类,抽象类中还可以含有其他非抽象方法。
例题讲解
定义一个名为Employee的类
public class Employee {
public String name;
public int age;
public double salary;
public Employee(){} // 无参数构造方法
public void sayHello() {
System.out.println("My name is " + name);
}
public double computeSalary(int hours, double rate) {
salary = salary + hours * rate;
return salary;
}
}
用类创建对象(实例)
使用构造方法创建对象
Employee employee; //声明对象
employee = new Employee(); //创建对象
employee.name = "李明";
employee.age = 28;
employee.salary = 5000.00;
⚠️理解栈和堆
JVM将内存空间在逻辑上分为栈(stack)与堆(heap)两种结构。
被调用方法参数和方法中的局部变量都存储在内存栈中,当程序使用new运算符创建对象时,JVM将在堆中分配内存。
假设在main()方法中创建Employee类一个对象
public static void main(String[] args){ //args是方法参数
//employee这个对象是方法的局部变量
Employee employee = new Employee();
employee.name = "李明";
employee.age = 20;
employee.salary = 5000.00;
}
博主用心写,读者点关注,互动传真情,知识不迷路