6-面向对象--类和对象 - liqiangbk
面向对象
1.面向对象
1.1 概念:
所谓的面向对象是一种编程思想,通过这种思想可以把生活中的复杂事情变得简单化,从原来的执行者变成了指挥者,面向对象是基于面向过程而言的。
我们经常说的面向对象的编程实现(OOP,Object Oriented Programming)
l 面向过程强调的是过程,例如:
1、打开冰箱 2、把大象放进去 3、关上冰箱
2 面向对象强调结果,例如:
1、 饿了,去平台点餐,这个动作就是面向对象。你没有去市场买菜洗菜做饭。。。只要有app就可以了。
2、 衣服脏了,直接甩给女票去处理等着穿干净的就可以了。你没有关注中间的过程。。只要找好对象就可以了。
3、面试官问什么是面向对象?你答万物皆对象!!不建议因为你还没到这个深度,最好举例。就像是,你说空即是色色即是空—信你个鬼。
1.2三大特性:
1、 封装性,把相关的数据封装成一个“类”组件
2、 继承性,是子类自动共享父类属性和方法,这是类之间的一种关系
3、 多态,增强软件的灵活性和重用性
2.类和对象
2.1 类:
1、 Java语言最基本单位就是类,类似于类型。
2、 类是一类事物的抽象。
3、 可以理解为模板或者设计图纸。
2.2对象:
每个对象具有三个特点:对象的状态,对象的行为和对象的标识。
1、 对象的状态用来描述对象的基本特征。
2、 对象的行为用来描述对象的功能。
3、 对象的标识是指对象在内存中都有一个唯一的地址用来和其他对象区分开来。
4、 类是一类事物的抽象,对象是具体的实现。
2.3类和对象的关系
类是对象的抽象,而对象是类的具体实例。类是抽象的,不占用内存,而对象是具体的,占用存储空间。类是用于创建对象的蓝图,
它是一个定义包括在特定类型的对象中的方法和变量的软件模板。
类与对象的关系就如模具和铸件的关系 类的实例化结果就是对象,而对一类对象的抽象就是类,类描述了一组有相同属性和相同方法的对象。
计算机语言就是通过属性和行为来描述现实世界的事物的.
那怎么通过java语言描述呢?通过类来描述事物,把事物的属性当做成员变量,把行为当做成员方法。
模型分析:
分析手机事物:
属性:颜色,尺寸,品牌,价格。。。
方法:打电话,发短信,听音乐。。。。
类:手机类,抽取相同的属性和行为
对象:可以按照模板生产很多个手机,比如1号手机对象,包含特有的成员变量和成员方法
3.类和对象的创建和使用
3.1练习:类的创建使用
通过class关键字创建类,通过new关键字创建对象。
package cn.tedu.oop; //这类用来 测试 类和对象的创建 //一个.java源文件中,可以包含多个类。但是,只能有一个类被public修饰,而且这个public的类名就是文件名。 public class Test3_OOP { public static void main(String[] args) { //4、通过new创建对象测试手机类 Phone p = new Phone() ; //对象的名字就是p,是一个引用类型的变量。存对象的地址值 //5、调用模板里的 方法 p.call(); p.message(); p.music(); //5.1、修改属性值 p.color = "red" ; p.size = 5.7; p.pinpai = "HUAWEI" ; p.price = 5899.8 ; //6、调用模板里的 属性 System.out.println( p.color ); System.out.println( p.size ); System.out.println( p.pinpai ); System.out.println( p.price ); } } // 1、通过class创建手机类 描述手机事物。类是抽象的,可以理解为设计图纸 class Phone { // 2、特征:成员变量(类里方法外) String color; // 颜色 double size; // 尺寸 String pinpai; // 品牌 double price; // 价格 // 3、 行为:成员方法 // 打电话 public void call() { System.out.println("call()..."); } // 发短信 public void message() { System.out.println("message()..."); } // 听音乐 public void music() { System.out.println("music()..."); } }
3.2 对象在内存中的存储—Java把内存分成5大区域,我们重点关注栈和堆。
1、 一般来讲局部变量存在栈中,方法执行完毕内存就被释放
2、 对象(new出来的东西)存在堆中,对象不再被使用时,内存才会被释放
3、 每个堆内存的元素都有地址值
4、 对象中的属性都是有默认值的
3.3单一对象内存分析图:
3.4创建多个对象:
package cn.tedu.oop; //这个类用来测试 创建多对象 public class Test4_OOP { public static void main(String[] args) { // 2、创建对象测试 Car c = new Car(); // 3、调用模板里的功能 c.start(); c.stop(); // 4、设置属性的值 c.color = "red"; c.price = 10; c.pinpai = "BMW"; System.out.println(c.color); System.out.println(c.price); System.out.println(c.pinpai); //5、创建多个对象 Car c2 = new Car(); c2.start(); c2.stop(); c2.color = "blue"; c2.price = 20; c2.pinpai = "AUDI"; System.out.println(c2.color); System.out.println(c2.price); System.out.println(c2.pinpai); //地址值一样吗?c是自己new的,c2也是自己new的 -- 肯定不同!! System.out.println(c);//cn.tedu.oop.Car@15db9742 System.out.println(c2);//cn.tedu.oop.Car@6d06d69c } } // 1、创建汽车类,用来描述汽车事物 class Car { // 特征 : 成员变量 String color; double price; String pinpai; // 行为 public void start() { System.out.println("start()..."); } public void stop() { System.out.println("stop()..."); } }
3.5 多对象内存分析图:
1、 变量c和变量c2不是一片空间,c2需要开辟新的空间
2、 Car car2 = new Car();,这时只要有new,就会新开辟空间在堆内存中存入对象。