理解面向对象
概述面向对象
面向过程和面向对象
一提到面向对象,可能大家关注的是后面的名词——对象,我第一次接触也是这样想的,谁还没单身过o( ̄▽ ̄)ブ;
言归正传,面向对象是强调具备了功能的对象,以类/对象为最小单位,考虑的是谁来做的问题;与面对对象相对应的是面向过程面向过程强调的是功能行为,以函数为最小单位,考虑怎么做的问题;面向对象的实现使我们从面向过程的执行者转变成面向对象的指挥者。
举一个现实的例子:就拿吃饭来说,我们自己做饭吃就相当于面向过程,我们需要完成整个做饭的过程,此时我们便是做饭的执行者(既考虑过程,也享受结果);而去某个餐馆里吃饭就相当于面向过程,我们将做饭这个过程交给了饭馆里的厨师去完成,相当于做饭的指挥者(不需要考虑过程,只需享受结果)。
类和对象
为了实现指挥者的角色,需要存在相应的对象来帮我们完成某些事情,即我们需要创建对象;但是又有一个新问题,对象,对象,是什么样的对象呢?此时便出现了类。因此,面向对象的两个要素便是类和对象。
类:对一类事物的描述,是抽象的,概念上的定义
对象:是实际存在的该类事物的每个个体,也成为类的实例,即实实在在的一个个个体。
解决问题时,如何运用面对对象思想
创建类、设计类
类的成员有:属性、方法、构造器,代码片、内部类;(并非所有都有才算一个类);其中属性(field)又称为成员变量,方法(method)又称为成员方法、函数。
类的方法声明的格式为:
权限修饰符 返回值类型 方法名(形参列表){
方法体;
}
代码范例
例如以下代码:
class Student{
//属性
String name;
int age = 1;
boolean isMale;
//方法
public void eat(){
System.out.println("人可以吃饭");
}
public void sleep() {
System.out.println("人可以睡觉");
}
//带形参
public void talk(String language) {
System.out.println("人可以说话,使用的是"+language);
}
}
上面的代码中创建了一个Student类; 其中name、age、isMale为Student类的属性,eat()、sleep()、talk(String)为Person的方法,也可以说是其功能。
创建类的对象
设计好类之后,我们需要调用类的功能去完成我们想要完成的事情;首先需要创建类的对象,然后通过对象调用类的功能,参考我们之前写过的声明和初始化引用数据类型的变量、从控制台输入内容的代码,如下:
//创建引用数据类型的变量
String[] str = new String[5];
//从控制台输入内容
Scanner scan = new Scanner(System.in);
其实上面两行代码便是创建了相对应类的对象,因此创建类的对象的格式为:
类名 变量名 = new 类名();
代码范例
代码的写法为:
Student student =new Student();
通过"对象.属性"或者"对象.方法"调用对象的结构
若创建一个类的多个对象,则每个对象都独立的拥有一套类的属性
小练习
练习题
代码实现
创建类
public class Person {
String name;
int age;
/**
* sex:1 表明是男性
* sex:0 表明是女性
*/
int sex;
public void study() {
System.out.println("studying");
}
public void showAge() {
System.out.println(age);
}
public int addAge(int i) {
age += i;
return age;
}
}
创建对象
Person person = new Person();
调用对象的属性及方法
person.age = 20;
person.sex = 1;
person.study();
person.showAge();
person.addAge(5);
完整代码
public class PersonTest {
public static void main(String[] args) {
Person person = new Person();
person.age = 20;
person.sex = 1;
person.study();
person.showAge();
person.addAge(5);
person.showAge();
}
}
public class Person {
String name;
int age;
/**
* sex:1 表明是男性
* sex:0 表明是女性
*/
int sex;
public void study() {
System.out.println("studying");
}
public void showAge() {
System.out.println(age);
}
public int addAge(int i) {
age += i;
return age;
}
}
运行结果: