java_面向对象

来源:互联网 发布:阿里的数据平台两个 编辑:程序博客网 时间:2024/05/17 04:16

       1.面向对象的概念

         在java领域中,有这么一句很有名的话: "万物皆对象"。不过这一般都是java高手才说出的话。而相对于我这个菜鸟而言,还是应该从基础开始理解。

        面向对象是一种思想。相对面向过程而言,将一些东西封装起来,复杂变得简单。从执行者转换为下令者。举几个简单的例子。如:

        1)人开门,下令者是人,而真正执行的是门自己,门调用自己的方法,把门打开。

        2)去饭店吃饭,顾客调用服务员的点餐功能,服务员使用自己的传菜单给后厨的功能,后厨行使自己的做饭功能,然后将饭菜给传菜生,传菜生调用自己的传菜功能最终将饭菜给顾客。而并非是顾客自己去后厨做。

        其实开发就是找对象用,没有对象,创建对象,使用对象,并维护对象之间的关系。

       面向对象的三种特征:封装,继承,多态

       2.类和对象的关系

       类:对现实生活中的描述。

       对象:就是类描述事物在现实中实实在在的体现。

       好比根据图纸制造汽车,图纸就是类,而汽车就是那对象。图纸(类)有一个,但可以根据图纸创造很多汽车(对象)。

      如何定义类:提取对象中的共性内容。对具体的抽象。

                              其中,属性在类中对应的是类中变量,行为在类中对应的是类中函数。

                              变量又分为成员变量与局部变量

                              成员变量:作用于整个类中。

 

      创建对象:Car car=new Car();  使用new关键字,具体对象就是对应java在堆内存中new建立出来实体。car是类类型变量,指向new Car()在内存中的位置。car存储在栈内存中。

      3.匿名对象

      匿名对象,顾名思义,没有名字的对象。拿Car类举例, new Car()就是一个匿名对象。

      作用:1)可以将匿名对象作为实际参数传递。

                  2)当对象的方法只调用一次时,有时可以用匿名对象来调用。简化代码。

      当内中中的对象没有被指向时,就会成为垃圾

封装(ENcapsulation)
私有仅仅是封装的一种表现形式。

之所以对外提供访问方式,就因为可以在访问方式中操控的元素。

封装:是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。
好处:1、将变化隔离
      2、便于使用
      3、提高重用性
      4、提高安全性
封装原则:
1、将不需要对外提供的内容都隐藏起来。
2、把属性都隐藏,提供公共方法对其访问。、


3.4 构造函数
特点:
1、函数名与类名相同
2、不用定义返回类型
3、不可以写return语句

作用:
1、结合对象进行初始化

 

**************
小细节:
1、当一个类中没有定义构造函数时,那么系统就会默认给该类加入一个空参数的构造函数。
2、当类中自定义了构造函数后,默认的构造函数就没有了。(即系统就不会再调用这个默认的构造函数了。)
3、构造函数和一般的写法上不同,在运行上也有不同。(A、构造函数实在对象已建立就运行,给对象初始化。而

一般方法是对象调用才执行,是给对象添加,对象具备的功能。B、一个对象建立,构造函数只运行一次,而一般方

法可以被对象调用多次。)


什么时候定义构造函数呢?
当分析事物时,该事物存在具备一些特性或者行为,那么将这些内容定义在构造函数中。

/*
{
   System.out.println("我爱你!");
}

构造代码块,
作用:给对象进行初始化,对象已建立就运行,而且优先于构造函数执行。

和构造函数的区别:
构造代码块是给所有对象进行统一初始化,而构造函数是给对应的对象初始化。
*/


/*
this: 就代表本类的对象,到底代表哪一个?
  this代表他所在函数,所属对象的引用。
简单说,哪个对象在调用this所在的函数,this就代表那个对象。~!

this语句只能定义在构造函数的第一行,因为初始化要先执行。比如下面的例子:
class person{
...
Person(String name,int age){
    this(name);  // 这个就是this语句,相当于一个name的初始化。不能是 /*this.name=name;
    this.name=name;//而这句话有了上面这句,就可以不用写了              this(name);   */              

     this.age=age;
}
Person(String name){
     this.name=name;
}
}
*/