什么是面向对象编程
面向对象编程(Object-Oriented Programming,简称OOP)是一种程序设计范式,它以对象作为基本单元,将数据和操作数据的方法封装在一起,通过对象之间的交互来实现程序的功能。面向对象编程的核心思想包括以下几个重要概念:
类与对象:类是一种抽象数据类型,用来描述具有相同属性和行为的对象的集合。对象是类的实例,具体化了类的属性和行为。
封装:封装是指将数据和操作数据的方法绑定在一起,通过访问控制限制外部对对象内部数据的访问,从而实现数据的安全性和隐藏对象的内部实现细节。
继承:继承是指一个类(子类)可以继承另一个类(父类)的属性和方法,从而实现代码的重用和扩展,提高了代码的可维护性和可扩展性。
多态:多态是指同一个方法调用会根据对象类型的不同而表现出不同的行为,可以通过继承和接口实现多态,提高了代码的灵活性和可扩展性。
面向对象编程的优点包括代码的重用性、可维护性、扩展性和灵活性,能够更好地组织和管理复杂的程序结构,提高开发效率和代码质量。在Java等面向对象编程语言中,面向对象编程已成为主流的编程范式,被广泛应用于软件开发领域。
面向对象与面向过程的区别
面向对象编程(OOP)和面向过程编程(POP)是两种不同的编程范式,它们在程序设计思想和实现方式上有明显的区别:
核心思想:
- 面向对象编程 :以对象为基本单位,将数据和操作数据的方法封装在一起,通过对象之间的交互来实现程序功能。强调数据和行为的封装、继承和多态。
- 面向过程编程 :以过程或函数为基本单位,按照解决问题的步骤顺序来组织程序,强调程序的执行顺序和流程控制。
代码组织:
- 面向对象编程:代码以类和对象为组织单位,通过对象的属性和方法来描述问题领域中的实体和行为,具有更好的模块化和封装性。
- 面向过程编程:代码以函数或过程为组织单位,按照解决问题的步骤顺序来组织程序,强调数据和操作的分离。
代码复用:
- 面向对象编程:通过继承、多态等机制实现代码的重用,提高了代码的灵活性和可扩展性。
- 面向过程编程:代码复用较为有限,通常需要重复编写相似功能的代码。
可维护性:
- 面向对象编程:由于封装性和继承性,使得代码更易于维护和扩展。
- 面向过程编程:随着程序规模的增大,代码的维护成本会逐渐增加。
总的来说,面向对象编程更适合于大型、复杂的软件系统开发,能够更好地组织和管理代码;而面向过程编程更适合于简单的、功能较为独立的程序开发。
类
什么是类
类是用来对一个实体(对象)来进行描述的,主要描述该对象具有哪些属性,哪些功能。
cpp比如:洗衣机,它是一个品牌,在Java中可以将其看成是一个类别。 属性:产品品牌,型号,产品重量,外观尺寸,颜色... 功能:洗衣,烘干、定时....
1. 类的定义方式以及对象的实例化:
类的定义方式:在Java中,类通过关键字
class
来定义,包含属性(成员变量)和方法(成员方法)。例如,定义一个简单的类Person
可以如下所示:
javapublic class Person { // 类的成员变量 String name; int age; // 类的成员方法 public void sayHello() { System.out.println("Hello, my name is " + name); } }
对象的实例化:通过
new
关键字可以实例化一个类,创建对象。例如,实例化Person
类的对象可以如下所示:
javaPerson person1 = new Person();
注意事项:
- 类名注意采用大驼峰定义
- 成员前写法统一为public
2.掌握类中的成员变量和成员方法的使用:
成员变量:类中的成员变量用于存储对象的状态或属性。可以通过对象名加点操作符
.
来访问和修改成员变量的值。例如,访问Person
类中的name
成员变量:
javaperson1.name = "Alice";
成员方法:类中的成员方法用于定义对象的行为或操作。可以通过对象名加点操作符
.
来调用类中的成员方法。例如,调用Person
类中的sayHello()
方法:
javaperson1.sayHello();
3. 掌握对象的整个初始化过程:
- 对象初始化过程包括为对象分配内存、调用构造方法进行初始化等步骤。
- 在Java中,构造方法用于初始化对象的状态。可以通过定义构造方法来指定对象的初始化过程。例如,为
Person
类添加一个构造方法:
javapublic Person(String name, int age) { this.name = name; this.age = age; }
实例化对象时,可以调用相应的构造方法来完成对象的初始化。例如:
javaPerson person2 = new Person("Bob", 30);
this关键字
this引言的特性
1.this的类型:对应类类型引言,即哪个对象调用就是哪个对象的引用类型
2.this只能在"成员方法"中使用
3.在"成员方法"中,this只能引用当前对象,不能再引用其他对象
在Java中,this 是一个关键字,代表当前对象的引用。它可以在类的方法中使用,用来引用当前对象的成员变量和方法。下面我将结合具体的代码例子来详细介绍Java中的this引用:
假设我们有一个简单的类 Person,其中包含姓名和年龄两个成员变量,并且有一个方法用来显示个人信息。我们将在构造方法和方法中使用this关键字来引用当前对象的成员变量。
javapublic class Person { private String name; private int age; // 构造方法 public Person(String name, int age) { this.name = name; // 使用this引用当前对象的成员变量 this.age = age; } // 方法:显示个人信息 public void displayInfo() { System.out.println("Name: " + this.name); // 使用this引用当前对象的成员变量 System.out.println("Age: " + this.age); } public static void main(String[] args) { Person person1 = new Person("Alice", 25); person1.displayInfo(); Person person2 = new Person("Bob", 30); person2.displayInfo(); } }
构造方法
1.概念
构造方法是一个特殊的成员方法,名字必须与类名相同,在创建对象时,由编译器自动调用,并且在整个对象的生命周期内只调用一次。
javapublic class Date { public int year; public int month; public int day; // 构造方法: // 名字与类名相同,没有返回值类型,设置为void也不行 // 一般情况下使用public修饰 // 在创建对象时由编译器自动调用,并且在对象的生命周期内只调用一次 public Date(int year, int month, int day){ this.year = year; this.month = month; this.day = day; System.out.println("Date(int,int,int)方法被调用了"); } public void printDate(){ System.out.println(year + "-" + month + "-" + day); } public static void main(String[] args) { // 此处创建了一个Date类型的对象,并没有显式调用构造方法 Date d = new Date(2021,6,9); // 输出Date(int,int,int)方法被调用了 d.printDate(); // 2021-6-9 } }
2.特性
- 名字必须与类名相同
- 没有返回值类型,设置为void也不行
- 创建对象时由编译器自动调用,并且在对象的生命周期内只调用一次(相当于人的出生,每个人只能出生一次)
- 构造方法可以重载(用户根据自己的需求提供不同参数的构造方法)
- 如果用户没有显示定义,编译器会生成一份默认的构造一定是无参的。
注意:this必须是构造方法中的第一条语句
不能形成环
javapublic Date(){ this(1900,1,1); } public Date(int year, int month, int day) { this(); } /* 无参构造器调用三个参数的构造器,而三个参数构造器有调用无参的构造器,形成构造器的递归调用 编译报错:Error:(19, 12) java: 递归构造器调用 */
希望此篇文章能帮到各位初步认识类与对象。