前言
1)面向对象是一种设计模式,如果你需要设计一个东西,就可以先抽象为一个类。
2)例如设计一辆车,你需要设计车的静态特征:轮子、方向盘、发动机等等;你需要设计车的动态行为:启动车、加速、减速等。
3)一个Java类带你入门面向对象。
一、面向过程与对象
1)区别
面向过程:一种执行模式,按一定步骤去执行。如造车,装车骨架、装发动机、装方向盘等等。
面向对象,一种设计模式,设计需要先抽象,再创新。如造车,轮子、发动机…
2)联系
两者相互协作,通过面向对象设计物体,再通过面向过程完成目的。如先设计车,再造车。(宏观上面向对象的设计,微观上面向过程的执行。)
二、面向对象三要素
1)静态特征
对物体特征的抽象过程,向上抽象出物体共同特征。
2)动态行为
对物体行为的抽象过程,向上抽象出物体共同行为。
3)构造器
抽象对应具体,类是一个抽象的过程,将类实例化就是一个具体的过程,该过程称为构造对象,需要构造器,构造器主要功能就是初始化值。在new 构造器时就创造好了对象,用this指针指向它,然后构造函数里面再初始化。
A、一个类认识面向对象
package com.xhu.java;
import java.util.Date;
import java.util.GregorianCalendar;
/**
* 一群学生抽象出来的学生类,抽象就是一个向上找描述物体的框架过程。
*/
public class Student {
/**
* 第一部分,一群物体抽象出来的静态特征,它们的公共特征。对一群物体观察得越仔细,抽象出来的静态特征越多。
*/
public String idCard;//每个学生都有身份证号码
public String name;//每个学生都有姓名
public Date birth;//每个学生都有出生时间
/**
* 第二部分,一群物体抽象出来的动态行为,它们的公共行为。对一群物体观察得越仔细,抽象出来的动态行为越多。
*/
public void eat() {//每个学生都有吃饭的行为。
//面向过程去编写吃饭这个行为。
System.out.println("洗手");
System.out.println("吃饭");
System.out.println("洗碗");
}
public void sleep() {//每个学生都有睡觉的行为。
//面向过程去编写睡觉这个行为。
System.out.println("洗漱");
System.out.println("上床");
System.out.println("睡觉");
}
/**
* 这是动态行为跟静态特征关联协作的地方。
*/
public void updateName(String name) {//每个学生可以修改他的名字
this.name = name;
}
/**
* 第三部分,构造器,向上的过程为抽象,向下的过程就是具体。比如来了一个新同学,一个真实的学生,此时就需要把他实例构造出来。
*/
public Student(String idCard, String name, Date birth) {//构造一个真实的对象,对他的基本特征设定一个具体的值
this.idCard = idCard;
this.name = name;
this.birth = birth;
}
/**
* 实例化对象,Java要求所有函数写入类之中,写一个该类的入口函数(该函数属于类,所以应该是static)main函数。(run一个类,必须要有入口函数main)
*/
public static void main(String[] args) {
//通过new构造器来向下构造一个具体的对象
Student s = new Student("111111111111","Jack马", new GregorianCalendar().getTime());
//1.吃饭
s.eat();
//2.睡觉
s.sleep();
//3.去公安局改个名字
s.updateName("pony马");
//4.看看自己的新名字
System.out.println(s.name);
}
}
三、构造器
1、形式
public[private] ClassName(){
}
2、四要素
1)通过new关键字调用。
2)构造器是特殊函数,无返回值,但是可给对象的成员变量初始化。不能显示定义返回类型,也不能return this,只可以用return结束函数,一般省略。
3)没有构造器,则编译器定义无参构造函数,若自己显示定义,则编译器不再提供。
4)构造器方法名必须与类名一致。
3、重载
根据实际参数需要进行函数重载。
/**
* 第三部分,构造器,向上的过程为抽象,向下的过程就是具体。比如来了一个新同学,一个真实的学生,此时就需要把他实例构造出来。
*/
public Student(String idCard, String name, Date birth) {//构造一个真实的对象,对他的基本特征设定一个具体的值
this.idCard = idCard;
this.name = name;
this.birth = birth;
}
public Student(){
}
总结
1)面向对象与过程,设计模式与执行模式。
2)面向对象三要素,如何抽象与具体?
参考文献
[1] 尚硅谷Java SE–高淇