面向对象编程总结

面向对象编程总结,第1张

一、类与对象 1. 面向对象 1.1 面向对象和面向过程有何优缺点?

        面向对象:

        优点:易维护、易复用、易扩展,由于面向对象有封装、继承、多态性的特性,可以设计出低耦合的系统,使系统更加灵活、更加易于维护。

        缺点:一般来说,性能比面向过程低。

        面向过程:

        优点:性能上优于面向对象,因为类在调用的时候需要实例化,开销过大。

        缺点:不易维护、复用、扩展。

        用途:单片机、嵌入式开发、Linux/Unix等对性能要求较高的地方。

低耦合:模块与模块之间尽可能的独立,两者之间的关系尽可能简单,尽量使其独立地完成一些子功能,这避免了牵一发而动全身的问题。

2. 类与对象 2.1 理解

类:一组相关的属性和行为的集合,是一个抽象的概念。

对象:此类事物的具体表现形式,存在的具体实体,具有明确定义的状态和行为。

2.2 语法结构

类的语法如下:

class 类名{
    成员变量类型 成员变量名;
}
 
例如:定义一个顾客类,其中有成员name,性别sex,年龄age
 
class Customer{
    String name;
    String sex;
    int age;
}
对象的语法如下:

类名 对象名;

例:

Customer zhangsan

2.3 对象实例化

类名 对象名=new 类名();
 
例:
Customer zhangsan=new Customer();
或:
Customer zhangsan;              ①
zhangsan=new Customer();        ②
说明:①句相当于定义了对象zhangsan,它是一个Customer类型,这称为对象引用,但是还没有给其分配内存,该引用指向空值(null),如图所示;

           ②句让zhangsan引用指向一个实际的对象,为其分配了相应内存,如图所示。

3. 成员变量

成员变量:在类体的变量部分中定义的变量,也称为字段。

语法格式为:

对象名.成员变量名

3.1 成员变量和局部变量有什么区别?

A:在类中的位置不同

成员变量:类中方法外

局部变量:代码块,方法定义中或者方法声明上(方法参数)

B:在内存中的位置不同

成员变量:在堆中

局部变量:在栈中

C:生命周期不同

成员变量:随着对象的创建而存在,随着对象的消失而消失

局部变量:随着方法的调用而存在,随着方法的调用完毕而消失

D:初始化值不同

成员变量:有默认值(构造方法对它的值进行初始化)

局部变量:没有默认值,必须定义,赋值,然后才能使用

二、成员函数 1.1 简单成员函数

格式如下:

void 函数名称(){
    函数内容;
}
调用方法:  

对象名.函数名( );

1.2 含参成员函数

格式如下:

void 函数名称(类型1 参数名1,类型2 参数名2,……,类型n 参数名n){
    函数内容;
}
 
调用方法为:
    对象名.函数名(参数值列表);
注意:若函数内部的变量和类中的成员变量重名,成员变量将被屏蔽,得不到那些正常效果。此时可以用“this”来标识该变量属于类中变量,而不是局部变量。

this关键字
如果局部变量和成员变量产生命名冲突,用this指明当前对象
构造函数重载,在一个构造函数中用this(形参)调用其他的构造函数。
●  构造函数不能用this()相互调用。
●  this()调用构造函数不能在成员函数中调用
●  当前构造函数 不能通过this 调用多个构造函数。
●  this()调用必须位于当前构造函数有效代码第一行。

1.3 带返回类型的成员函数

格式如下:

返回类型 函数名称(类型1 参数名1,类型2 参数名2,……,类型n,参数名n){
    函数内容;
    return 和函数返回类型一致的某个变量或对象;
}

2. 函数参数的传递 2.1引用数据类型采用引用传递

 在方法调用过程中,传递的参数是按引用进行传递,其实传递的引用的地址,也就是变量所对应的内存空间的地址。

3. 函数重载(OverLoad) 3.1 重载的概念

        函数重载也叫静态多态。在同一个类中,允许存在一个以上的同名函数,只要它们的参数个数或者参数类型不同即可,这时就形成了重载。重载和返回值类型无关。

3.3 重载函数命名规范

        (1)在定义函数时,函数名不能使用关键字,第一个单词的首字母小写,采用驼峰式;

        (2)参数的个数,类型,顺序至少有一项不相同;

        (3)不能通过访问权限、返回类型、抛出的异常进行重载

4. 函数重写(OverRide) 4.1 函数重写概念

        在子类中定义某个方法与其父类有相同的名称和参数;子类对象引用或者子类对象的父类引用使用这个方法时,将调用子类中的定义。

4.2 重写函数使用规范

        (1) 方法名、参数、返回值必须相同。

        (2) 子类方法不能缩小父类方法的访问权限。

        (3) 子类方法不能抛出比父类更多的异常(子类可以不抛出异常)。

        (4) 被定义为final的方法不能被重写。

三、构造函数 1 定义规范

(1)函数名称和类的名称相同

(2)不含返回类型

(3)在实例化对象时,必须传入与之对应的参数列表

格式如下:

类名 对象名=new 类名(传给构造函数的参数列表);
注意:

        ①当一个类的对象被创建时,构造函数会被自动调用。

           在对象的生命周期中,构造函数只被调用一次。

        ②构造函数可以被重载,即一个类中可以定义多个构造函数。

       ③若在一个类中没有定义构造函数,系统会自动产生一个默认的构造函数,其通过“类名 对象名=new 类名( );”实例化对象。

四.继承 1.1继承的作用

        代码复用,可扩展,方便建模,java中用于extends继承,且无多继承。

五.封装

高内聚:封装细节,便于修改内部代码提高可维护性。

低耦合:简化外部调用,便于使用者使用,扩展和协作

实现:使用访问控制符:private:私有只有本类可访问

default:无修饰符,同一个包中的类可访问

protected:可被同一个包中的类或其他包中的子类访问

public:可被该项文件中所有类访问

六.接口

接口中所有的类方法皆为抽象方法,既不需要搞明abstract

接口和实现类不是父子关系,是实现规则的关系

普通类:具体实现

抽象类:具体实现规范

接口:规范

七.关键字

1.static:在类中,static声明的成员变量为静态变量,其生命周期与类相同。一般用"类名.属性方法"调用,在static方法中不可直接访问非static的成员。

2.this:在类中用this区分当前对象。使用this调用重载的构造方法中用,且必循位于构造方法第一句。this不可用于static方法中

3.final:修饰变量则不能重新赋值。修饰方法则不可被子类重写,但可被重载。修饰类则不能被继承。

4.super:(1) super是一个关键字,并不是一个引用,也不指向任何对象;
(2)super只代表当前对象内部的那一块父类型特征;
(3)super关键字可以出现在实例方法和构造方法当中;
(4) super的语法有:super. 和 super();
(5) super.在大部分情况下是可以省略的,如果父类和子类当中有同名属性,想在子类当中访问父类的属性,这种情况下不能省略;
(6)super()只能出现在构造方法非注释语句的第一行;
(7) super()通过当前的构造方法去调用父类中的构造方法,目的是在创建子类对象的时候,先初始化父类型特征。

八.package机制

包 (package) 是组织类的一种方式,使用包的主要目的是保证类的唯一性。

package 语句作为 Java 源文件的第一条语句,指明该文件中定义的类所在的包。 若缺省该语句,则指定为无名包 。它的格式为:package 顶层包名 子包名;

在 源文件中使用 import 显式的导入指定包下的类或接
声明 在包的声明和类的声明之间。
如果 需要导入多个类或接口,那么就并列显式多个 import 语句即可
举例 :可以使用 java.util.* 的方式,一次性导入 util 包下所有的类或接口。
如果 导入的类或接口是 java.lang 包下的,或者是当前包下的,则可以省略此 import 语句。
如果 在代码中使用不同包下的同名的类。那么就需要使用类的全类名的方式指明调用的
是哪个类。
如果 已经导入 java.a 包下的类。那么如果需要使用 a 包的子包下的类的话,仍然需要 导入。
import static 组合的使用:调用指定类或接口下的静态的属性或方法

九.抽象类:abstract

使用 abstract 来修饰,则说明该方法是抽象方法,抽象方法只有声明没有实现。需要注意的是 abstract 关键字只能用于普通方法,不能用于 static 方法或者构造方法中。

抽象方法的 3 个特征如下:

  1. 抽象方法没有方法体
  2. 抽象方法必须存在于抽象类中
  3. 子类重写父类时,必须重写父类所有的抽象方法                                                                      注意:在使用 abstract 关键字修饰抽象方法时不能使用 private 修饰,因为抽象方法必须被子类重写,而如果使用了 private 声明,则子类是无法重写的。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/756325.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-30
下一篇 2022-04-30

发表评论

登录后才能评论

评论列表(0条)

保存