面向过程与面向对象
1.Java类以及类的成员:属性,方法,构造器,代码块,内部类
2面向对象的三大特征:封装性,继承性,多态性(抽象性)
其他关键字:this,super,static,final,abstract,interface,import
“人把大象装进冰箱”
1.面向过程,强调的是具体功能行为,以函数为最小单位,考虑怎么做
- 把冰箱门打开
- 把大象塞进入
- 把冰箱门关闭
2.面向对象,强调具备了功能的对象,以类/对象为最小单位,考虑谁来做
- 人{
打开(冰箱){
冰箱.开开();
}
抬起(大象){
大象.进入(冰箱);
}
}
冰箱{
开开(){}
关闭(){}
}
大象{
进入(冰箱){}
}
Java面向对象的两个要素
- 类:对一类事物的描述,是抽象的,概念上的的定义
- 对象 :是实际存在的该类事物的每个个体,因而也称为实例(instance)
面向对象的思想概述
1.可以理解为: 类=抽象概念的人; 对象=实实在在的某个人
2.面向对象程序设计的重点是类的设计
3.类的设计,其实就是类的成员的设计
**
类与类的成员
**
引言:生物世界中细胞又是由什么构成的呢?细胞核,细胞质…,Java中用类class来描述事物也是这样的,常见类的成员有:1.属性:对应类中的成员变量,2.行为:对应类中的成员方法
class Person {
// 属性:对应PersonTest类的成员变量(三个)
String name;
int age;
boolean isMale;
// 行为:对应类中的成员方法
public void eat() {
System.out.println("人会吃饭");
}
public void sleep() {
System.out.println("人会睡觉");
}
public void talk(String langauge) {
System.out.println("人会交流" + langauge);
}
}
**
类的实例化:即创建类的对象(创建类的对象)
**
类和对象的使用(面向对象思想落地的体现)
- 创建类,与设计类的成员
- 实例化类即创建对象
- 通过”对象.属性","对象.方法"来调用对象结构
package Study;
public class PersonTest {
public static void main(String args[]) {
//创建Person对象
Person p1 = new Person();
//调用对象结构:属性,方法;
//调用属性 "对象.属性"
p1.name = "Tom";
p1.age = 22;
System.out.println(p1.name + " " + p1.age);
p1.eat();
p1.sleep();
p1.talk("英语");
}
static class Person {
// 属性:对应PersonTest类的成员变量(三个)
String name;
int age;
boolean isMale;
// 行为:对应类中的成员方法
public void eat() {
System.out.println("人可以吃饭");
}
public void sleep() {
System.out.println("人可以睡觉");
}
public void talk(String language) {
System.out.println("人可以交流"+language);
}
}
}
体会类的多个对象之间的关系
如果创建一个类的多个对象,则每个对象都独立拥有一套类的对象。(非static的)意味着,如果我们修改一个对象的属性a,则不影响另一个对象属性a的值。
package Study;
public class PersonTest {
public static void main(String args[]) {
//创建Person对象
Person p1 = new Person();
//调用对象结构:属性,方法;
//调用属性 "对象.属性"
p1.name = "Tom";
p1.age = 22;
System.out.println(p1.name + " " + p1.age);
p1.eat();
p1.sleep();
p1.isMale=true;
p1.talk("英语");
//--------------------------------------------------------------------------------------------------------
//体会类的多个对象的关系
Person p2=new Person();
System.out.println(p2.name);//null?Tom 或者是报错
//输出结果为null
System.out.println(p2.isMale);//p1.isMale=true,但输出p2.isMale==false;
//-----------------------------------------------------------------------------------------------------------
}
static class Person {
// 属性:对应PersonTest类的成员变量(三个)
String name;
int age;
boolean isMale;
// 行为:对应类中的成员方法
public void eat() {
System.out.println("人可以吃饭");
}
public void sleep() {
System.out.println("人可以睡觉");
}
public void talk(String language) {
System.out.println("人可以交流"+language);
}
}
}
将p1变量保存的对象地址值赋给p3,导致p1和p3指向了堆空间中的同一个对象实体
Person p3=p1;
System.out.println(p3.name);//Tom;
p3.age=98;
System.out.println(p1.age);//98;
全部代码:
package Study;
public class PersonTest {
public static void main(String args[]) {
//创建Person对象
Person p1 = new Person();
//调用对象结构:属性,方法;
//调用属性 "对象.属性"
p1.name = "Tom";
p1.age = 22;
System.out.println(p1.name + " " + p1.age);
p1.eat();
p1.sleep();
p1.isMale=true;
p1.talk("英语");
//--------------------------------------------------------------------------------------------------------
//体会类的多个对象的关系
Person p2=new Person();
System.out.println(p2.name);//null?Tom 或者是报错
//输出结果为null
System.out.println(p2.isMale);//p1.isMale=true,但输出p2.isMale==false;
//-----------------------------------------------------------------------------------------------------------
//将p1变量保存的对象地址赋值给p3,导致p1和p3指向了堆空间中同一个对象实体
Person p3=p1;
System.out.println(p3.name);
p3.age=98;
System.out.println(p1.age);//98
}
static class Person {
// 属性:对应PersonTest类的成员变量(三个)
String name;
int age;
boolean isMale;
// 行为:对应类中的成员方法
public void eat() {
System.out.println("人可以吃饭");
}
public void sleep() {
System.out.println("人可以睡觉");
}
public void talk(String language) {
System.out.println("人可以交流"+language);
}
}
}