Java面向对象
面向对象
1.概念
Thinking in java
所谓的面向对象是一种编程思想,通过这种思想可以把生活中的复杂事情变得简单化,从原来的执行者变成了指挥者。
面向对象是基于面向过程而言的。
我们经常说的面向对象的编程实现(OOP,Object Oriented Programming)
万物皆对象。
2.三大特征
1、 封装性,把相关的数据封装成一个“类”组件。
2、 继承性,是子类自动共享父类属性和方法,这是类之间的一种关系
3、 多态,增强软件的灵活性和重用性
3.类和对象
类
1、 Java语言最基本单位就是类,类似于类型。
2、 类是一类事物的抽象。
3、 可以理解为模板或者设计图纸。
对象
每个对象具有三个特点:对象的状态,对象的行为和对象的标识。
1、 对象的状态用来描述对象的基本特征。
2、 对象的行为用来描述对象的功能。
3、 对象的标识是指对象在内存中都有一个唯一的地址值用来和其他对象区分开来。
4、 类是一类事物的抽象,对象是具体的实现。
汽车类:
实现可以有奥迪汽车对象、有宝马汽车对象。
类和对象的关系
1、 计算机语言是用来描述现实世界事物的。成员属性+成员方法
2、那怎么通过java语言描述呢?通过类来描述事物,把事物的属性当做成员变量,把行为当做成员方法。
分析手机事物:
特征:颜色,尺寸,品牌,价格。。。
功能:打电话,发短信,听音乐。。。
类:手机类,抽取相同的特征和功能
对象:可以按照模板生产很多个手机,比如1号手机对象,包含特有的成员变量和成员方法
4.类和对象的创建和使用
练习1:类的创建使用
1 package cn.Devin.oop; 2 3 4 5 //一个.java源文件中,可以定义多个类,只不过要求,只能有一个类被public修饰,而且被public修饰的类名就是.java的文件名 6 7 8 9 //这个类用来创建类和使用类 10 11 public class Test2_Class { 12 13 public static void main(String[] args) { 14 15 //测试使用类,我们知道类是抽象的,具体使用是要产生对象来使用 16 17 //通过new关键字创建对象 18 19 //p是引用类型的变量(默认值是null),p保存的是手机对象在内存中的地址值 20 21 Phone p = new Phone(); 22 23 24 25 //可以调用模板里的方法 26 27 p.call(); 28 29 p.music(); 30 31 p.message(); 32 33 34 35 //设置属性值 36 37 p.color = "red"; 38 39 p.size = 5.5; 40 41 p.pinpi = "HUAWEI"; 42 43 p.price = 5688.6; 44 45 46 47 //查看属性值 48 49 System.out.println(p.color); 50 51 System.out.println(p.size); 52 53 System.out.println(p.pinpi); 54 55 System.out.println(p.price); 56 57 58 59 } 60 61 } 62 63 //创建手机类 -- 用来描述手机事物 64 65 //通过class关键字创建类 66 67 //生活中,可以通过 特征+行为 描述事物 68 69 class Phone{ 70 71 //程序中,怎么体现? 特征 -- 成员属性/成员变量 行为 -- 成员方法 72 73 //特征:颜色,尺寸,品牌,价格 -- 成员变量 74 75 String color ; //默认值是null 76 77 double size ; //默认值是0.0 78 79 String pinpi ; //默认值是null 80 81 double price ; //默认值是0.0 82 83 84 85 //行为:打电话,发短信,听音乐 -- 成员方法 86 87 //方法的修饰符 方法的返回值 方法名(参数列表){方法体} 88 89 public void call() { 90 91 System.out.println("call()..."); 92 93 } 94 95 public void message() { 96 97 System.out.println("message()..."); 98 99 } 100 101 public void music() { 102 103 System.out.println("music()..."); 104 105 } 106 107 }
对象在内存中的存储
Java把内存分成5大区域,现阶段我们重点关注栈和堆。
1、 一般来讲局部变量存在栈中,方法执行完毕内存就被释放
2、 对象(new出来的东西)存在堆中,对象不再被使用时,内存才会被释放
3、 每个堆内存的元素都有地址值
4、 对象中的属性都是有默认值的
单一对象内存图
练习2:创建多个对象
1 package cn.Devin.oop; 2 3 4 5 //这个类用来测试创建多个对象 6 7 public class Test4_ManyClass { 8 9 public static void main(String[] args) { 10 11 //使用类 12 13 Person p = new Person(); 14 15 //调用属性和功能 16 17 p.name="张三"; 18 19 p.age=20; 20 21 System.out.println(p.name); 22 23 System.out.println(p.age); 24 25 26 27 Person p2 = new Person(); 28 29 //调用属性和功能 30 31 p2.name="李四"; 32 33 p2.age=10; 34 35 System.out.println(p2.name); 36 37 System.out.println(p2.age); 38 39 } 40 41 } 42 43 //创建Person类 44 45 class Person{ 46 47 // 特征 48 49 String name; 50 51 int age; 52 53 // 行为 54 55 public void study() { 56 57 System.out.println("study()...."); 58 59 } 60 61 public void eat() { 62 63 System.out.println("eat()...."); 64 65 } 66 67 }
多个对象内存图