黑马程序员_面向对象

------- android培训java培训、期待与您交流! ----------

       说到Java程序设计,不得不提面向对象的设计思想。

       面向对象是一种设计程序的思想,是相对于面向过程的思想而言的。在早前的c语言程序设计中,主要就是运用面向过程的思想。面向过程强调的是功能行为,而面向对象将功能封装进对象,强调具备了功能的对象。面向对象是基于面向过程的。举例来说:一个人要走进屋子,需要打开门,然后迈步进步,然后关上门,如果用面向过程的思想来思考,这个过程可以分为:人打开门——人走进屋——人关上门。很明显,这就是又多个动作组成一个过程。换而用面向对象的思想,把人看作是一个对象,把门也看作一个对象,这两个对象是相互独立的。首先,人要进屋就要先开门,就调用门这个对象中打开的方法。人这个对象中又包含一个走进屋的方法。然后,当人走进屋后,又调用门这个对象中关闭的方法,整个动作就完成了。我们把“一个人走进屋子”当作我们的需求,我们根据需求调用不同的对象包含的方法完成各种动作,这就是面向对象的思考方式。

       面向对象是一种符合人们思考习惯的思想,通过面向对象的方式可以将复杂的事情简单化,将程序员从执行者转换成了指挥者。面向对象的思想要求我们在完成需求时:1.先要去找具有所需的功能的对象来用。2.如果该对象不存在,那么创建一个具有所需功能的对象。3.这样简化开发并提高复用。而程序员的开发过程也就转变成不断的创建对象,使用对象, 指挥对象做事情的过程。设计过程转变成管理和维护对象之间的关系。

       面向对象有三个主要的特征:封装(encapsulation)

                                                      继承(inheritance)

                                                      多态(polymorphism)

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

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

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

      继承:多个类中存在相同属性和行为时,将这些内容抽取到 单独一个类中,那么多个类无需再定义这些属性和行 为,只要继承单独的那个类即可。

      特点:1.多个类可以称为子类,单独这个类称为父类或者超 类。2.子类可以直接访问父类中的非私有的属性和行为。3.通过extends 关键字让类与类之间产生继承关系。

      好处:1.继承的出现提高了代码的复用性。2.继承的出现让类与类之间产生了关系,提供了多态的前提。

      多态:某一类事物的多种存在形态。

      体现:父类或者接口的引用指向或者接收自己的子类对象。

      作用:多态的存在提高了程序的扩展性和后期可维护性。

      前提:需要存在继承或者实现关系
                 要有覆盖操作

 

      类与对象的关系

      首先,明确一点,二者绝对不是等价的,但是又存在着联系。java中描述事物通过类的形式体现,类是具体事物的抽象,概念上的定义。对象即是该类事物实实在在存在的个体。二者的关系如图所示

   
       类就是图纸 
       汽车就是堆内存中的对象
       每一个汽车的对象都是通过对图纸这个类的实例化所产生的。
 
       类的定义
       生活中描述事物无非就是描述事物的属性和行为。
       如:人有身高,体重等属性,有说话,打球等行为
       Java中用类class来描述事物也是如此
       •属性:对应类中的成员变量。
       •行为:对应类中的成员函数。
       定义类其实在定义类中的成员(成员变量和成员函数)。
       成员变量:
      •成员变量定义在类中,在整个类中都可以被访问。
      •成员变量随着对象的建立而建立,存在于对象所在的堆内存中。
      •成员变量有默认初始化值。
      局部变量:
      •局部变量只定义在局部范围内,如:函数内,语句内等。
      •局部变量存在于栈内存中。
      •作用的范围结束,变量空间会自动释放。
      •局部变量没有默认初始化值。
      下面举一个创建对象,使用对象的例子:
       class Car//对Car这类事物进行描述
      {
         String color = "red";
         int num = 4;
      void show()
     {
         System.out.println("color="+color+"..num="+num);
      }
     }
     class CarDemo
     {
          public static void main(String[] args)
     {
     Car c = new Car();//建立对象
      c.color = "black";//对对象的属性进行修改
      c.show();//使用对象的功能。
      }
      }     
      构造函数
      特点:
      1.函数名与类名相同
      2.不用定义返回值类型
      3.不可以写return语句
      作用:给对象进行初始化
      需要注意的是,构造函数可以不止一个,多个构造函数是以重载的形式存在的。
例如:

/*
需求:建立一个类,并通过重载构造函数的方式实现不同的初始化
*/
class Person
{//私有成员变量
 private String name;
 private int age;

 //构造代码块
 {
  System.out.println("cry....");
 }

 //无参数构造函数
 Person()
 {
    }

 //一个参数的构造函数
 Person(String name)
 {
  this.name=name;
 }

 //两个参数构造函数
 Person(String name ,int age)
 {
  this(name);
  this.age=age;
 }

 //以下是成员变量的set,get方法
 public void setName(String name)
 {
  this.name=name;
 
 }
 public String getName()
 {
  return name;
 }
 public void setAge(int age)
 {
  this.age=age;
 }
 public int getAge()
 {
  return age;
 }
 public void speak()
 {
  System.out.println(name+": "+age);
 }

}
public class PersonDemo
{//主函数入口
 public static void main(String[] args)
 {

  //创建实例化对象,根据参数选择相对的构造函数进行初始化
  Person p=new Person("leo");
  p.speak();
  p.setName("liu");
  p.setAge(24);
  p.speak();
  Person p1=new Person("yean",23);
  p1.speak();

  
 }
}

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值