05 面向对象基础

来源:互联网 发布:金牛考勤网络连接 编辑:程序博客网 时间:2024/05/01 08:27

面向对象的概念——类

v      类是描述对象的“基本原型”,它定义一类对象所能拥有的数据和能完成的操作。在面向对象的程序设计中,类是程序的基本单元。

v       相似的对象可以归并到同一个类中去,就像传统语言中的变量与类型关系一样。

v      程序中的对象是类的一个实例,是一个软件单元,它由一组结构化的数据和在其上的一组操作构成。

面向对象的概念——对象

对象在程序中是通过一种抽象数据类型来描述的,这种抽象数据类型称为类(class)。

类和对象的关系

v      类是Java的核心和本质。它是Java语言的基础,因为类定义了对象的本质。

v      类定义了一种新的数据类型,可以用新类型来创建该类型的对象。

v     类(class)是对象(object)的模板,而对象(object)是类的一个实例(instance)。

类的组成

v      变量:指对象的状态。

v      方法:指对象的功能单元。

v      消息:

           软件对象通过相互间传递消息来相互作用和通信,一个消息由三部分组成:

    • 接受消息的对象
    • 接收对象要采取的方法
    • 方法需要的参数

类定义的语法规范

类的严格定义及修饰符

[类的修饰符] class 类名称 [extends 父类名称][implements 接口名称列表]

 

      变量定义及初始化;

 

      方法定义及方法体;

 

}

类的修饰符:  [public] [abstract | final]

                          缺省方式为 friendly

类的定义

v      类由两部分组成: 类的声明部分 “class 类名”; 类体 “{ … }”;

§        例: class Person{
         //类体内容
      }

v      注:

§        关键字 class 小写

§        类名需符合java标识符规定; 良好的编程规范一般 类名首字母大写; 类名要有意义(即见名识意)

 

v      类体中包含属性(变量)的定义及方法(函数)的定义

变量定义的语法规范

v      变量的定义及修饰符

 

 [变量修饰符] 变量数据类型 变量名1,变量名2[=变量初值]…;

 

 [public | protected | private ] [static] [final ] [transient ][volatile]

 

v     成员变量的类型可以是Java中任意的数据类型,包括简单类型,类,接口,数组。

变量分类定义

v      类体中变量分三类: 实例成员变量;类(静态)成员变量;局部变量;
变量首字母一般小写;

v      类(静态)成员变量简称类变量或静态变量

v     class Person{
    static String classer;
}

v      局部变量

v     Class Person{
    public void speak(){
           String name;
    }
}

变量的作用域

v      作用域( scope)决定了变量可使用的范围

§        全局变量(Global variables):变量可以在整个类中被访问;

§        局部变量( Local variables ):变量只能在定义其的代码段中被访问。

 

v      作用域规则:在一个代码段中定义的变量 只能在该代码段或者该代码段的子代码段中可见。

 

v     使用局部变量比使用全局变量更安全。

变量的初始化

成员变量如果没有赋初值,则会自动初始化。

数据类型

初值

boolean

false

byte/short/int/long

0

float

0.0f

double

0.0d

char

‘\u0000’

对象类型

null

 

局部变量必须赋初值,否则会在引用的地方报错。

方法定义的语法规范

方法的定义及修饰字

[方法修饰符] 返回类型  方法名称(参数1,参数2,…) [throws exceptionList]

{

    …(statements;)    //方法体:方法的内容

}

[public | protected | private ] [static][final | abstract] [native] [synchronized]

返回类型可以是任意的Java数据类型,当一个方法不需要返回值时,返回类型为void。参数的类型可以是简单数据类型,也可以是引用数据类型(数组、类或接口),参数传递方式:简单数据类型是值传递,对象是引用传递。

方法分类

v      按返回值分:

§        有返回值

§        无返回值

v      按参数分:

§        无参数

§        有参数(单个参数,多个参数) (了解形参与实参概念)

v      按范围或功能分:

§        实例方法;

§        类方法;

§        构造方法

方法调用

v      定义方法时在方法声明部分的括号中定义的变量为形式参数(即形参);调用时方法时需根据被方法的形参传入对应的实际参数(即实参)。

v      方法调用

实例方法

v      类体中方法分:实例成员方法; 类(静态)成员方法; 构造方法;方法首字母一般小写。

v      实例成员方法简称实例方法

类方法

类(静态)成员方法简称类方法或静态方法

v      构造方法;构造方法名与类名相同,构造方法无返回值也不需void关键字

构造方法

v      构造方法(Constructor)是一种特殊的方法。Java中的每个类都有构造方法,用来初始化该类的一个新的对象。构造方法具有和类名相同的名称,而且不返回任何数据类型。系统在产生对象时会自动执行。

v      构造方法应包含的内容:

§        定义一些初值或内存配置工作;

§        一个类可以有多个构造方法(重载),根据参数的不同决定执行哪一个;

§        如果程序中没有定义构造方法,则创建实例时使用的是缺省构造方法,它是一个无内容的空方法

this关键字

this指向自己的引用,即当前方法所在的对象。它的一个主要作用是要将自己这个对象当作参数,传送给别的对象中的方法。

方法重载(overloaded)

方法重载即指同一个类内多个方法可以享有相同的名字。但是这些方法的参数必须不同(参数个数不同或参数类型不同)。

注意点

v      类定义过程注意点:

§        在类中只包括变量的定义和方法的定义

§        实例方法可以访问本类中的任何成员变量及任何成员方法; 类方法只能访问本类中的类成员变量及类成员方法;

§        类中一般变量定义放在类的前面,方法定义放在后面;但变量的定义方法的定义顺序随意;

要点补充:

1. 从这里每天都要强制编辑的规范性;

    (类名,方法名,变量名)大小写要求,缩近;

     特别是要用有意义的名称;

        (英文,实在不行,就用中文拼音缩写)

 

2. 类的定义

   变量分:实例,类,局部变量;

 

   方法分: (难点)

     按返回值分:

          有返回值,无返回值;

     按参数分:(简单说明形参与实参概念)

          有参数(单个,多个);

          无参数

     按范围或功能分:

          实例方法;类方法;构造方法

 

3. 说明值传递; (引用传递下节课讲)

===================================================================

开发者的主要任务就是先建立模拟问题领域的对象模型,然后通过程序代码来实现对象模型。

问题领域是指软件系统所模拟的真实世界的系统。

面向对象编程的主要任务就是定义对象模型中的各个类。

对象是类的实例。

类是对象的模板。

软件系统的复杂功能是由各种对象协同工作完成的。

 

1:什么是类

       可以将现实生活中的对象经过抽象,这种抽象数据类型称为类。

       是一组具有相同属性和行为的对象的抽象。

       如:动物类(Animal)水果类(Fruit)

 

2:什么是对象

       在Java语言,所有的人,事物或者模块都是一个对象。

       1.万物为对象2.属性和行为3.状态 4.唯一性5.属于某个类

       某个瞬间,对象的属性的取值,对象行为会改变对象的状态。

 

       相同的对象具有一些相同的特性。

       狗,猫,蛇3个对象(动物的对象)

       苹果,梨,桔子3个对象(水果的对象)

 

3:类和对象的关系

       类是对象的模板(抽象化表示),对象是类的实例化(具体化的展现)

 

4:类的组成结构

 

       Java是纯面向对象(除了8种基本数据类型)

       而对象是从类产生的。因此类是组成Java程序最基本也是最核心的元素。

 

     变量(属性,成员变量)

 

     方法(函数,成员方法,责任)

 

     消息(对象与对象之间的通讯,对象数据之间的传递)

 

5:类的定义与规范

 

6:属性的定义与规范

 

   属性的的定义

   属性的初始值(默认值)

 

  ==变量的分类==

      

       类变量:类对象属于对象。static修饰的变量称为类变量。静态区中。只实例化一次,因此只占据一次内存。

       对象的成员变量:成员变量是属于对象。位于堆区。

       局部变量。局部方法中定义的变量,以及形式参数都是局部变量。位于栈区。

 

  ==变量的作用域(生命周期)==

       就是不同类型的变量在内存中存活的时间。

 

7.方法的分类:

       ==按返回值划分:==

              有返回值

              无返回值

 

       ==按参数划分:==

              有参数方法

              无参数方法

 

              voidsum(int x,int y):参数定义之间,用逗号隔开。

              sum(x,y);              //调用也是用逗号隔开。

 

              实参(实际的参数)

              形参(形式参数)。

 

                     参数传递时,实参传给形参有两种方式:

                     A:如果传递是基本数据类型的话,那么只是值的拷贝。

                     B:如果传递是对象类型的话,那么传递的是对象的地址。

      

       ==按功能方法:==

       1构造方法

       2实例方法(对象方法,成员方法)

       3类方法

 

              构造方法:

                     是实例化对象必须执行的操作。

                     ===用于构建一个新的对象的初始化操作。

                     如果没有构造方法的话,系统自动创建一个空的构造方法。

                     如果有构造方法的话,系统将不再构建。

 

 

                     1.方法名必须和类名相同

                     2.不要声明返回类型

                     3.不能被static,final,abstract修饰。

             

                           

                     重载构造方法:

                     在不同的条件下,对象可能有不同的初始化行为。employee

                     默认的构造方法:

                            1.隐含的默认构造方法2.程序显式定义的默认构造方法,至少有一个构造方法,无参,public,空。

                            2.如果类中显时定义了一个或者多个构造方法,并带参数,就失去了默认构造方法

 

==========================================================================

 

this:

       表示当前对象。   

       this指向自己的引用

       可以用this调用当前对象的属性与方法。

 

 

方法的重载(OverLoad)

      

方法重载即指同一个类内多个方法可以享有相同的名字。

但是这些方法的参数必须不同(参数个数不同或参数类型不同)。

 

调用的时候通过参数的个数或者的类型由编译器来寻找到底要调用哪一个

方法。

 

类方法,对象方法,构造方法都可以做方法的重载。

 

当重载的参数如果有继承关系时。除非在程序中精确描述要

传递的类型。否则调用的都是符合子类参数的方法。

 

Object obj = null;

String str = null;

 

test.print(obj);        //精确类型

test.print(str);         //精确类型

test.print(null);              //都匹配的类型,调用子类的方法。

 

public void print(Object some){

       System.out.println("Objectversion print");

}

public void print(String some){

       System.out.println("Stringversion print");

}

原创粉丝点击