黑马程序员------面向对象(一)

1.1 面向对象概念

1.1.1 面向对象概念

面向对象是相对面向过程而言,强调的是功能的对象。面向对象和面向过程都是一种思想。

举例理解面向对象:如请人修车,我只面向修车的人,不面对修车的过程。只看中修好车的结果。

面向对象的本质:以类的方式组织代码,以对象的方式组织数据。

 

1.1.2 面向对象的特点

是一种符合人们思考习惯的思想,可以将复杂的事情简单化,将程序员从执行者转换成了指挥者。

1.1.3 面向面向对象的特征:
封装(encapsulation)
继承(inheritance)
多态(polymorphism)
以后开发,其实就是找对象,没有对象,自己创建一个

 

1.2 类与对象之间的关系

1.2.1类和对象的关系:特殊到一般,具体到抽象

 

现实生活中的对象:张三 李四。
想要描述:提取对象中共性内容。对具体的抽象。
描述时:这些对象的共性有:姓名,年龄,性别,学习java功能。

映射到java中,描述就是class定义的类。
具体对象就是对应java在堆内存中用new建立实体,属性对应是类中变量,行为对应的类中的函数(方法)。

类就是:对现实生活中事物的描述,是对对象的抽象,java中我们叫做class。

定义类,其实就是在描述事物,就是在定义属性和行为。

对象:就是这类事物,实实在在存在个体,在java中我们叫做object,instance实例,以后我们说某个类的对象,某个类的实例,是一样的意思

 

 

1.2.2成员变量和局部变量的区别

1.2.2.1成员变量和局部变量。

作用范围。
成员变量作用于整个类中。
局部变量变量作用于函数中,或者语句中。
在内存中的位置:
成员变量:在堆内存中,因为对象的存在,才在内存中存在。
局部变量:存在栈内存中。

 

1.2.2.2匿名对象的应用

匿名对象时对象的简化形式;

new 实例名称(); 

使用方式一:当对对象的方法只调用一次时,可以用匿名对象来完成,这样写比较简化,如果对一个对象进行多个成员调用,必须给这个对象起个名字。

使用方式二:可以将匿名对象作为参数使用

 

 

1.2.3示例:创建对象,使用对象

需求:描述汽车(颜色,轮胎数)。描述事物其实就是在描述事物的属性和行为

 

1 //对Car这类事物进行描述
 2 class Car
 3 {
 4     String color = "red";//描述颜色
 5     int num = 4;//描述轮胎数
 6     void run()
 7     {
 8         System.out.println("color = " +color +"...num = " +num);//输出汽车的值
 9     }
10 }
11 
12 class CarDemo
13 {
14     public static void main(String[] args)
15     {
16         Car c = new Car();//通过new关键字,建立对象,c就是一个类类型的引用变量,指向了该类的对象
17         c. color = "blue" ;//对对象的属性进行修改
18         c.run() ;//通过对象.成员的形式来调用对象的run方法
19     }
20 }

 

 

1.3 封装

1.3.1封装:

是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。

 

好处:1. 将变化隔离。
     2. 便于使用。
   3. 提高重用性。
     4. 提高安全性。

封装原则:1. 将不需要对外提供的内容都隐藏起来。
        2. 把属性都隐藏,提供公共方法对其访问。

1.3.2对象属性的私有

1. private :私有,权限修饰符:用于修饰类中的成员(成员变量,成员函数)。

2.被私有化的成员只在本类中有效。

3.注意:私有仅仅是封装的一种表现形式

之所以对外提供访问方式,就因为可以在访问方式中加入逻辑判断等语句。

对访问的数据进行操作。提高代码健壮性

 

1.3.3示例:

/*

人:属性:年龄

  行为:说话

本例将age私有化以后,类以外即使建立了对象也不能直接访问。
但是人应该有年龄,就需要在Person类中提供对应访问age的方式。

之所以对外提供访问方式,就因为可以在访问方式中加入逻辑判断等语句。
对访问的数据进行操作。提高代码健壮性。

*/

 

1 class Person
 2 {
 3     private int age ;//通过private私有化age,把属性进行隐藏,让别人不能直接访问赋值
 4     public void setAge( int a) //通过set、get方法对外提供公共方法对其访问
 5     {
 6         if (a > 0 && a < 130)
 7         {
 8             age = a;
 9         }
10         else
11             System.out .println("feifa age" );
12     }
13     public int getAge()//取得年龄信息
14     {
15         return age ;
16     }
17     void speak()
18     { 
19         System.out .println("age = " + age);
20     }
21 }
22 
23 class PersonDemo
24 {
25      public static void main(String[] args)
26     {
27         Person p = new Person();//创建并实例化对象
28         p.setAge(20);
29         p.speak();
30         //如果赋值不合法,则set方法不允许成功赋值
31         // p.setAge(-40);
32     }
33 }

  

END