标签:面向对象
首先需要理解两个概念:面向过程和面向对象的概念。
面向过程:可以理解为如果遇到一件事情需要进行处理,需要自己亲自去一步一步的解决这件事情的过程。
面向对象:这相当与面向过程的升级,可以理解为遇到一件事情需要去处理,我们可以找懂这件事情的人来做,我们只需要去指挥这个人去完成这件事情即可,从一个执行者转变成了指挥者。
1、 面向对象思想更符合人类的思考习惯。
2、 面向对象思想将复杂的问题简单化。
3、 面向对象思想将自己从执行者(自己做事情)的角色转变为指挥者(只会对象做事情)。
有一种说法是世间万物皆为对象,将世间存在的事物都可以看成是对象,我们可以通过代码的形式进行描述这些事物。
下面通过代码来描述一下小汽车这个事物
l 定义小汽车类
package cn.itcast.Demo01; /* * 通过类的定义,来描述小汽车 * 需要对小汽车的属性和功能两个方面进行描述,将这两点定义在类中 * 属性(特点): * 颜色 * 轮胎数 * 功能(行为): * 运行(跑) * 它的属性就是成员变量,功能就是成员方法 */ public class Car { //属性(成员变量) //定义颜色 String color; //定义轮胎数 int count; //功能(成员方法) public void run(){ System.out.println("小汽车在跑..."+color+"..."+count); } }
l 小汽车的测试类
package cn.itcast.Demo01; /* * 测试类,测试小汽车类 * 创建小汽车类的对象:Car c = new Car(); * 通过对象名.的形式调用成员变量并进行赋值,并调用成员方法 */ public class CarTest { public static void main(String[] args) { //创建Car类的对象 Car c = new Car(); //通过对象名.的方式调用成员变量并进行赋值 c.color = "黑色"; c.count = 4; //调用成员方法 c.run(); } }
类:是对事物的抽象描述,比如人有姓名,有年龄,会吃饭,会学习,这些都是人本来就有的属性和功能的抽象描述,并不知道是哪一个人。
对象:就是对抽象事物的具体描述,现在我们可以对这个人进行定义姓名,年龄,将这个抽象的事物具体体现出来,这时候我们可以定义对象定义出很多具体的人。
1、 定义位置上的不同
a) 成员变量定义在类中,方法外
b) 局部变量定义在方法中,语句内
2、 作用域不同
a) 成员变量的作用范围在整个类中都有效
b) 局部变量的作用范围只在方法中,语句内有效
3、 默认值不同
a) 成员变量有自己的默认值,类型不同,默认值也不同
b) 局部变量没有默认值,需要自己去赋值才能使用
4、 内存位置不同
a) 成员变量是跟随对象的创建就存在在堆内存中
b) 局部变量是跟随方法的,跟随方法进入栈内存
5、 生命周期不同
a) 成员变量的生命周期相对较长,类结束之后,等待垃圾回收机制的清理而消亡
b) 局部变量的生命周期较短,方法结束,跟随方法的弹栈而消亡
封装的体现:其实类和方法就是代码功能的封装
封装的好处:
1、 隐藏了功能的实现细节,仅对外提供了访问方式,便于调用者调用。
2、 提高了代码的复用性
3、 提高了代码的安全性
private关键字:权限修饰符,私有的,该关键字只能修饰成员,不能修饰局部变量。
作用:提高了代码的安全性,对成员进行私有化,限制外部对其进行直接操作,造成安全隐患,这是将该成员私有化,仅对外提供一个公共的访问方式,被private修饰的成员只在本类中有效,这时就需要将私有的成员定义在方法中,外部调用这个方法就可以了。该关键字的具体代码体现如下:
l 定义人的类
package cn.itcast.Demo02; /* * 定义一个类,对人进行描述 * 属性: * 姓名 * 年龄 * 功能: * 讲话 */ public class Person { //属性 //定义姓名成员变量 String name; //定义年龄成员变量,将该变量私有化,防止出现姓名为负数,或者年龄过大的问题 private int age; //将私有的年龄封装进方法中,外部调用该方法即可,防止出现年龄为负数,年龄过大的安全隐患 public void setAge(int a){ //对年龄进行判断,如果为负数或者过大,直接将年龄赋值为20, if(a<0 || a>120){ age = 20; }else{ age = a; } } //功能 public void speak(){ System.out.println("人会讲话..."+name+"..."+age); } }
l 测试人的类
package cn.itcast.Demo02; /* * 测试类:测试描述人的类 */ public class PersonTest { public static void main(String[] args) { //创建Person类的对象 Person p = new Person(); //调用姓名并进行赋值 p.name = "王杰"; //调用年龄的方法 p.setAge(-30); //调用说话的方法 p.speak(); } }
在类中定义了成员变量,都应该对成员变量进行私有化操作,对外提供setXxx(设置值)方法和getXxx(获取值)方法就可以了,还是对人的描述进行定义,代码如下:
l 定义人的类
package cn.itcast.Demo03; /* * 定义一个类,对人进行描述 * 属性: * 姓名 * 年龄 * 功能: * 讲话 */ public class Person { //属性 //定义姓名成员变量 private String name; //定义年龄成员变量,将该变量私有化,防止出现姓名为负数,或者年龄过大的问题 private int age; //将私有的年龄封装进方法中,外部调用该方法即可,防止出现年龄为负数,年龄过大的安全隐患 public void setAge(int a){ //对年龄进行判断,如果为负数或者过大,直接将年龄赋值为20, if(a<0 || a>120){ age = 20; }else{ age = a; } } //将姓名封装进方法,设置值 public void setName(String n){ name = n; } //获取值的方法 public String getName(){ return name; } public int getAge(){ return age; } //功能 public void speak(){ System.out.println("人会讲话..."+name+"..."+age); } }
l 测试类
package cn.itcast.Demo03; import cn.itcast.Demo03.Person; /* * 测试类:测试描述人的类 */ public class PersonTest { public static void main(String[] args) { //创建Person类的对象 Person p = new Person(); //调用方法进行赋值 p.setAge(20); p.setName("王杰"); p.speak(); //调用方法获取值 System.out.println(p.getName()); System.out.println(p.getAge()); } }
标签:面向对象
原文地址:http://blog.51cto.com/13502869/2050446