《java入门第一季》之面向对象

之前的代码描述都是基于面向过程的,今天开始正式进入面向对象的世界。什么是对象?首先要区分类和对象的概念——

现实世界中是如何描述一个事物的?

举例:学生
姓名,年龄,性别...
学习,吃饭,睡觉

属性:该事物的描述信息
行为:该事物能够做什么

学习编程语言,是为了模拟现实世界的事物的。
而学习的编程语言Java中最基本的单位是:类。
所以,我们就应该把事物通过类来体现出来:
由此,我们就得到了现实世界事物和类的对应关系:


事物: 类:
属性 成员变量
行为 成员方法


类:是一组相关的属性和行为的集合。是一个抽象的概念。
对象:是该类事物的具体表现形式。具体存在的个体。


举例:
学生:类

班长:对象

1:面向对象思想
面向对象是基于面向过程的编程思想。

面向过程:强调的是每一个功能的步骤
面向对象:强调的是对象,然后由对象去调用功能

2:面向对象的思想特点
A:是一种更符合我们思想习惯的思想
B:可以将复杂的事情简单化
C:将我们从执行者变成了指挥者

举例:
买电脑:
面向过程:我的了解电脑--了解我自己的需求--找对应的参数信息--去中关村买电脑--讨价还价--买回电脑
面向对象:我知道我要买电脑 -- 班长去给我买 -- 班长就买回来了
洗衣服:
面向过程:把衣服脱下--找一个盆--放点洗衣粉--加点水--把衣服扔进去--搓一搓--清洗衣服--拧干--晾起来
面向对象:把衣服脱下--打开全自动洗衣机--扔进去--一键即可--晾起来
吃饭:
面向过程:去超市买菜--摘菜--洗菜--切菜--炒菜--盛起来--吃
面向对象:上饭店吃饭,你--服务员(点菜)--厨师(做菜)--服务员(端菜)--吃


3:把大象装进冰箱
面向过程:
动作有哪些呢?
A:打开冰箱门
B:装进大象
C:关闭冰箱门

代码体现;
class Demo {
public static void main(String[] args) {

//写了方法以后,调用就改变了
open();
in();
close();
}

public static void open() {
System.out.println("打开冰箱门");
}

public static void in() {
System.out.println("装进大象");
}

public static void close() {
System.out.println("关闭冰箱门");
}
}

面向对象:
我们怎么才能更符合面向对象思想呢?****重点中的重点!!!
A:有哪些类呢?
B:每个类有哪些东西呢?
C:类与类直接的关系是什么呢?

把大象装进冰箱的分析? (如何分析有哪些类呢?UML。名词提取法。)
A:有哪些类呢?
大象
冰箱
Demo
B:每个类有哪些东西呢?
大象:
进去
冰箱:
开门
关门
Demo:
main方法
C:类与类直接的关系是什么呢?
Demo中使用大象和冰箱类的功能。

代码体现:
class 大象 {
public static void in() {
System.out.println("装进大象");
}
}

class 冰箱 {
public static void open() {
System.out.println("打开冰箱门");
}

public static void close() {
System.out.println("关闭冰箱门");
}
}

class Demo {
public static void main(String[] args) {
冰箱调用开门
大象调用进去
冰箱调用关门
}
}

4:开发,设计,特征
面向对象开发
就是不断的创建对象,使用对象,指挥对象做事情。

面向对象设计
其实就是在管理和维护对象之间的关系。


面向对象特征
封装(encapsulation)
继承(inheritance)
多态(polymorphism)


/*
	事物:
		属性	事物的信息描述
		行为	事物的功能
	
	类:
		成员变量	事物的属性
		成员方法	事物的行为
		
	定义一个类,其实就是定义该类的成员变量和成员方法。
	
	案例:来完成一个学生类的定义。
	
	学生事物:
		属性:姓名,年龄,地址...
		行为:学习,吃饭,睡觉...
		
	把事物要转换为对应的类:
	
	学生类:
		成员变量:姓名,年龄,地址...
		成员方法:学习,吃饭,睡觉...
		
	成员变量:和以前变量的定义是一样的格式,但是位置不同,在类中方法外。
	成员方法:和以前的方法定义是一样的格式,但是把static先去掉。
	
	首先应该定义一个类,然后完成类的成员。
*/
//这是学生类
class Student {
	//定义成员变量
	//姓名
	String name;
	//年龄
	int age;
	//地址
	String address;
	
	//定义成员方法
	//学习的方法
	public void study() {
		System.out.println("学生爱学习");
	}
	
	//吃饭的方法
	public void eat() {
		System.out.println("学习饿了,要吃饭");
	}
	
	//睡觉的方法
	public void sleep() {
		System.out.println("学习累了,要睡觉");
	}
}
<pre name="code" class="java">/*
	在一个java文件中写两个类:一个基本的类,一个测试类。
	注意:文件名称和测试类名称一致。
	
	如何使用呢?
		创建对象使用。
		
	如何创建对象呢?
		格式:类名 对象名 = new 类名();
		
	如何使用成员变量呢?
		对象名.变量名
	如何使用成员方法呢?
		对象名.方法名(...)
*/
//这是学生类
class Student {
	//定义成员变量
	//姓名
	String name; //null
	//年龄
	int age; //0
	//地址
	String address; //null
	
	//定义成员方法
	//学习
	public void study() {
		System.out.println("学生爱学习");
	}
	
	//吃饭
	public void eat() {
		System.out.println("学习饿了,要吃饭");
	}
	
	//睡觉
	public void sleep() {
		System.out.println("学习累了,要睡觉");
	}
}

//这是学生测试类
class StudentDemo {
	public static void main(String[] args) {
		//类名 对象名 = new 类名();创建对象
		Student s = new Student();
		
		//输出成员变量值  (对象名.变量名)
		//System.out.println(s.name);
		//System.out.println(s.age);
		//System.out.println(s.address);
		//改进写法
		System.out.println(s.name+"---"+s.age+"---"+s.address);
		
		
		//给成员变量赋值
		s.name = "林青霞";
		s.age = 27;
		s.address = "北京";
		//赋值后的输出
		System.out.println(s.name+"---"+s.age+"---"+s.address);
		
		//调用方法,使用成员方法(对象名.方法名(....);)
		s.study();
		s.eat();
		s.sleep();
	}
}
<pre name="code" class="java">/*
	手机类的测试
*/
class Phone {
	//创建成员变量
	//品牌
	String brand;
	//价格
	int price;
	//颜色
	String color;
	
	//创建成员方法
	//打电话的方法
	public void call(String name) {
		System.out.println("给"+name+"打电话");
	}
	
	//发短信的方法
	public void sendMessage() {
		System.out.println("群发短信");
	}
	
	//玩游戏的方法
	public void playGame() {
		System.out.println("玩游戏");
	}
}

class PhoneDemo {
	public static void main(String[] args) {
		//创建手机对象
		//类名 对象名 = new 类名();
		Phone p = new Phone();
		
		//直接输出成员变量值;(对象名.变量名)
		System.out.println(p.brand+"---"+p.price+"---"+p.color);
		
		//给成员变量赋值
		p.brand = "诺基亚";
		p.price = 100;
		p.color = "灰色";
		//再次输出
		System.out.println(p.brand+"---"+p.price+"---"+p.color);
		
		//调用方法;(对象名.成员方法名称(.....);)
		p.call("林青霞");
		p.sendMessage();
		p.playGame();
	}
}

创建多个对象内存图如下所示:


<img src="http://img.blog.csdn.net/20160503225405927?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
两个对象内存图

三个对象内存图:
<img src="http://img.blog.csdn.net/20160503225525417?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />



原文地址:https://www.cnblogs.com/wanghang/p/6299887.html