java基础系列之三:java的面向对象程序设计

来源:互联网 发布:javascript模式 编辑:程序博客网 时间:2024/06/06 08:53
1、面向对象编程概述
  1>面向对象编程(Object Oriented Programming,简称OOP)描述的是对象之间的相互作用。
  2>面向对象编程与面向过程编程的区别:
  过程化程序先确定算法,再确定数据结构;面向对象编程先确定数据结构,再确定运算。
  面向过程编程的程序员,习惯于简历数据结构存放数据并定义函数来操作数据;面向对象编程的程序员则构造一个对象模型,将数据与方法组织在一起。
 
2、对象 对象的状态 对象的行为
  我们可以把现实世界的事物抽象成对象。
  对象一般都有两个特征:状态和行为。
  软件的对象概念是由现实世界对象抽象而来。把现实世界对象的状态保存在软件对象的变量中,现实对象的行为通过软件对象的方法来实现。
 
3、类和对象
  把相似的对象划归成一个类。
  在软件中,类就是一个模板,它定义了通用于一个特定种类的所有对象的状态和行为。
  类是创建对象的模板,对象是类的实例。
 
4、面向对象程序设计
  从程序设计的角度看,类是面向对象程序中最基本的程序单元。类实质上定义的是一种数据类型,这种数据类型就是对象类型。所以我们可以使用类名称来声明对象变量。
  声明对象变量之后,必须用运算符new创建对象实体之后,才能使用对象。

5、面向对象编程的难点
  掌握面向对象的困难之处在于思路的转换。
  我们通常习惯于考虑解决问题的方法,而不是考虑将问题抽象成对象再去解决它。

6、一个简单的例子
  编写一个驾驶汽车的方法:
  面向过程的程序设计:编写一个方法,void drivecar();
  面向对象的程序设计:将一辆汽车看成一个对象,将所有汽车对象的共性抽取出来,设计一个类Car,类中有一个方法void driver(),用Car这个类实例化一个具体的对象car,调用:car.drive();
 
7、类的构造方法
  1>构造方法的名字和类名相同,并且没有返回值。
  2>构造方法主要用于为类的对象定义初始化状态。
  3>我们不能直接调用构造方法,必须通过new关键字来自动调用,从而创建类的实例。
  4>java的类都要求有构造方法,如果没有定义构造方法,java编译器会为我们提供一个缺省的不带参数的构造方法,但如果我们显示定义了构造方法之后,缺省构造方法将被覆盖。
  5>构造方法不能被继承。
 
8、new关键字的作用
  为对象分配内存空间。
  引起对象构造方法的调用。
  为对象返回一个引用。
 
9、缺省构造方法
  当我们用缺省构造方法初始化对象时,系统用默认值初始化对象的成员变量。
  各种数据类型的默认值为:
  数值型   0
  boolean  false
  char     '\0'
  对象     null
 
10、方法的重载(overload)
  重载构成的条件:方法的名称相同,但参数类型或参数个数不同,才能构成方法的重载。
  类的继承符合“两同两小一大”规则:
   两同:方法名相同,参数相同;
   两小:方法抛出的异常要比父类方法小,返回值要比父类方法小。
   一大:方法的访问权限要比父类方法大。
  
11、特殊变量this
   this变量代表对象本身。
   当类中有两个同名变量,一个属于类,而另一个属于某个特定的方法,使用this区分成员变量和局部变量。
   使用this简化构造函数的调用。
   一个类所有实例对象调用的成员方法在内存中只有一个拷贝,尽管在内存中可能有多个对象,而数据成员在类的每个对象所在内存中都存在着一份拷贝。this变量允许相同的实例方法为不同的对象工作。每当调用一个实例方法时,this变量将被设置成引用该实例方法的特定的类对象。方法的代码接着会与this所代表的对象的特定数据建立关联。
  
12、关键字static
   静态方法和静态变量是属于某一个类,而不属于类的对象。
   静态方法和静态变量的引用直接通过类名引用。
   在静态方法中不能调用非静态的方法和引用非静态的成员变量。反之,则可以。
   可以用类的对象obj去调用静态的方法method()。如obj.method()。
  
13、常量的定义
   使用关键字final定义常量,例如:final double PI=3.1415926;
   作为一种约定,在定义常量时,通常采用大写形式。
   final常量可以在声明的同时赋初值,也可以在构造方法中赋初值。
   为了节省内存,我们通常将常量声明为静态的(static),将常量声明为静态的,只能在声明时赋初值,不能在构造方法中赋初值。
  
14、类的继承
   在java中,通过关键字extends继承一个已有的类,被继承的类称为父类(超类、基类),新的类称为子类(派生类)。
   在java中,不允许多继承。
 
15、方法的覆盖
   在子类中定义一个与父类同名、返回类型、参数类型均相同的一个方法,称为方法的覆盖。
   股改发生在子类与父类之间。
 
16、特殊变量super
  特殊变量super,提供了对父类的访问。
  可以使用super访问父类被子类隐藏的变量或覆盖的方法。
  java规定,super()的调用必须放在方法第一行。
  每个子类构造方法的第一条语句,都是隐含的调用super(),如果父类没有这种形式的构造函数,那么会在编译的时候报错。
 
17、多态性
  通过覆盖父类的方法来实现,在运行时根据传递的对象引用,来调用相应的方法。
   instanceof:判断一个对象是否是某一个类的实例。
  
18、面向对象程序设计demo
  问题:求一个长方形的周长和面积。
  以面向对象的程序设计方式思考:
  1>一个长方形可以看成一个长方形对象。
  2>一个长方形对象有两个状态(长和宽)、两个行为(求周长和求面积)。
  3>将所有长方形的共性抽取出来,设计一个长方形类。
  4>通过长方形对象的行为,就可以求出某个具体的长方形对象的周长和面积。
  具体代码如下:
  class Rectangle
  {
   int l,v;
   int perimeter()
   {
    return 2*(l+v);
   }
   int area()
   {
    return l*v;
   }
   public static void main(String[] args)
   {
    Rectangle rect1=new Rectangle();
    rect1.l=10;
    rect2.v=5;
    System.out.println("perimeter of rect1 = "+rect1.perimeter());
    System.out.println("area of rect1 =" +rect1.area());
   }
  } 
 
小知识:javap.exe命令用来反编译字节码,将类定义成员变量和成员方法打印出来。

原创粉丝点击