黑马程序员技术交流社区

标题: 面向对象思想 [打印本页]

作者: 我的最优解    时间: 2015-6-20 09:07
标题: 面向对象思想
一、面向对象思想
1. 抽象
面向对象程序设计的基本要素是抽象,程序员通过抽象来管理复杂性。
管理抽象的有效方法是使用层次式的分类特性,这种方法允许用户根据物理含义分解一个复杂的系统,把它划分成更容易管理的块.例如,一个计算机系统是一个独立的对象.而在计算机系统内部由几个子系统组成:显示器,键盘,硬盘驱动器,DVD-ROM,软盘,音响等,这些子系统每个又由专门的部件组成.关键是需要使用层次抽象来管理计算机系统(或其他任何复杂系统)的复杂性。
2. 封装
  封装是一种把代码和代码所操作的数据捆绑在一起,使这两者不受外界干扰和误用的机制.封装可被理解为一种用做保护的包装器,以防止代码和数据被包装器外部所定义的其他代码任意访问.对包装器内部代码与数据的访问通过一个明确定义的接口来控制.封装代码的好处是每个人都知道怎样访问代码,进而无需考虑实现细节就能直接使用它,同时不用担心不可预料的副作用。
  在JAVA中,最基本的封装单元是类,一个类定义着将由一组对象所共享的行为(数据和代码).一个类的每个对象均包含它所定义的结构与行为,这些对象就好象是一个模子铸造出来的.所以对象也叫做类的实例。
  在定义一个类时,需要指定构成该类的代码与数据.特别是,类所定义的对象叫做成员变量或实例变量.操作数据的代码叫做成员方法.方法定义怎样使用成员变量,这意味着类的行为和接口要由操作实例数据的方法来定义。
  由于类的用途是封装复杂性,所以类的内部有隐藏实现复杂性的机制.所以JAVA中提供了私有和公有的访问模式,类的公有接口代表外部的用户应该知道或可以知道的每件东西.私有的方法数据只能通过该类的成员代码来访问。
3. 继承
  继承是指一个对象从另一个对象中获得属性的过程.是面向对象程序设计的三大原则之二,它支持按层次分类的概念.例如,波斯猫是猫的一种,猫又是哺乳动物的一种,哺乳动物又是动物的一种.如果不使用层次的概念,每个对象需要明确定义各自的全部特征.通过层次分类方式,一个对象只需要在它的类中定义是它成为唯一的 各个属性,然后从父类中继承它的通用属性.因此,正是由于继承机制,才使得一个对象可以成为一个通用类的一个特定实例.一个深度继承的子类将继承它在类层次中的每个祖先的所有属性。
继承与封装可以互相作用.如果一个给定的类封装了某些属性,它的任何子类将会含有同样得属性,另加各个子类所有得属性.这是面向对象程序在复杂性上呈线性而非几何增长的一个重要概念.新的子类继承其所有祖先的所有属性.子类和系统中的其他代码不会产生无法预料的交互作用。
4. 多态
   多态是指一个方法只能有一个名称,但可以有许多形态,也就是程序中可以定义多个同名的方法,用"一个接口,多个方法"来描述.可以通过方法的参数和类型引用。
5. 封装,继承,多态的组合使用
  在由封装,继承,多态所组成的环境中,程序员可以编写出比面向过程模型更健壮,更具扩展性的程序.经过仔细设计的类层次结构是重用代码的基础.封装能让程序员不必修改公有接口的代码即可实现程序的移植.多态能使程序员开发出简洁,易懂,易修改的代码.例如:汽车
从继承的角度看,驾驶员都依靠继承性来驾驶不同类型(子类)的汽车,无论这辆车是轿车还是卡车,是奔驰牌还是菲亚特牌,驾驶员都能找到方向盘,手刹,换档器.经过一段时间驾驶后,都能知道手动档与自动档之间的差别,因为他们实际上都知道这两者的共同超类:传动装置.
从封装的角度看,驾驶员总是看到封装好的特性.刹车隐藏了许多复杂性,其外观如此简单,用脚就能操作它.发动机,手刹,轮胎大小的实现对与刹车类的定义没有影响。
  从多态的角度看,刹车系统有正锁反锁之分,驾驶员只用脚踩刹车停车,同样的接口可以用来控制若干种不同的实现(正锁或反锁).
这样各个独立的构件才被转换为汽车这个对象的.同样,通过使用面向对象的设计原则,程序员可以把一个复杂程序的各个构件组合在一起,形成一个一致,健壮,可维护的程序。
示例一:
public class Person {
  // 实例域用private修饰,隐藏属性,外部通过setter()和getter()访问
  private String name;
  private int age;
 
  // 通过一系列set和get方法,实现和数据的交互
  public String getName() {
    return name;
  }
 
  public void setName(String name) {
    this.name = name;
  }
 
  public int getAge() {
    return age;
  }
 
  public void setAge(int age) {
    this.age = age;
  }
}
二、类的内部属性基本知识
1. 成员变量和局部变量
 (1)作用范围 
成员变量:作用于整个类
局部变量:作用于方法或语句中
(2)存储的范围
成员变量:随着类的创建而创建在堆内存中,随着类的消失而消失。
局部变量:随着方法被调用或者语句被执行而存在于桟内存中,调用完毕或语句结束就会自动释放。
(3)初始值
成员变量:有默认的初始值
局部变量:需要赋值才能够使用
2. 构造方法
(1)特点:方法名字与类名相同,没有返回类型,没有返回值。
(2)作用:构造函数是作用于创建对象并对其进行初始化赋值,对象一旦创建就会调用相应的构造函数。
(3)构造方法和成员方法的区别:
     A:构造方法和类名相同,并且没返回值和返回类型。普通成员方法可以任意起名,必须有返回类型,可以没返回值。
     B:构造方法在创建对象的时候调用,只调用一次相应的构造函数。普通成员在创建好的对象调用,可多次调用。
构造方法的注意事项:没有定义构造方法,系统默认给出一个默认的无参构造方法。如果一个自定义类提供了构造方法,系统就不会再给出无参的构造方法,不可使用无参,需要手动创建。
例如:
class test  
{  
      test(){}//构造方法
test(String s){}//带参构造方法
 }

3. 关键字private
私有的意思,权限修饰符,用来修饰成员变量和成员函数,用此关键字修饰的成员只在本类中有效,自由是封装的一种体现。例如:private 变量类型 成员变量;private 返回类型 函数名。
 
4. 关键字static
(1)静态的意思,用来修饰成员变量和成员函数。
(2)静态的特点:随着类的加载而加载,优先于对象存在,对所有对象共享,可以直接被类名直接调用。
(3)静态变量和成员变量的区别:
     a:静态变量也称为类变量可以直接通过类名调用,也可以通过对象名调用。成员变量是实例变量,只能通过对象名调用,属于对象的变量。
     b:静态变量存储在方法区上的静态区域,成员变量存储在堆内存中。
     c:静态变量随着类的加载而加载,随着类的消失而消失,成员变量随着对象的加载而加载,随着对象的消失而消失。
     d:静态变量是所有对象共享的数据,成员变量是每个对象的特有数据。
(4)静态的优缺点:
     优点:对对象的共享数据进行单独空间存储,节省内存,可以直接被类名调用
     缺点:生命周期过长,访问出现权限,静态只能访问静态
静态的注意事项:静态的方法只能访问静态的成员,静态方法不能有this和super关键字,主函数是静态的,因没生成对象所以必须要以static修饰。
5. 代码块
(1)静态代码块:它只执行一次比main先执行。
(2)构造代码块:给对象进行初始化,对象一建立就执行优先于构造函数执行
 (3)执行顺序:静态代码块--构造代码块--构造方法

作者: zc强盗    时间: 2015-6-20 12:09
写的还是可以
作者: 1千克=1024克    时间: 2015-6-20 23:21
写的好详细啊     
作者: 洪伟    时间: 2015-6-21 00:48
怎么忽然想起c语言了




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2