2017-10-09 17:23:52

在面向对象技术中,将客观世界中的一个事物作为一个对象来考虑,比如有个张先生,他就是一个对象。每个对象都有自己的属性和行为。张先生的属性根据需要有姓名、性别、身高等,他的行为有开车,阅读,跑步等。从程序设计的角度来看,事物的属性可以用变量来描述,行为则用方法来反映。

一、面向对象设计的核心技术

面向对象程序设计的核心技术主要是封装、继承和多态性。

  • 封装

类是封装的基本单元。通过封装可以隐藏类的实现细节,也可以避免对类中属性的直接操作。可以通过类的公共接口访问类中的变量,而不必知道这个接口的具体实现方式。只要这个方法的名字和参数不变,即使类中的变量被重新定义,或方法的代码被修改,对类中的变量的访问也不会受到影响。比如,你在计算机上安装了一个声卡,你不必知道声卡的内部结构,也不必知道功能如何实现的,因为实现声卡功能的继承电路被封装了。你只要知道声卡应该装在电脑主板的什么位置,其他的设备如音箱,光驱怎样和声卡连接就可以了。

  • 继承

继承是对类的功能的重用和扩充。通过对某一个类的继承产生一个新的子类,子类既有从某个类中继承下来的功能,又可以自行定义自己的变量和方法,产生新的功能。

  • 多态性

多态性指的是方法的名字相同,但实现不同。即“同一接口,多个方法”。如有三个方法,分别用来计算圆、矩形、三角形面积,他们的名字可以都叫做area。

二、类的结构

Java是一种完全面向对象对程序设计语言。他所有的属性类型和方法都封装在类中,Java继承了C++的有点,但放弃了那些含糊,复杂和容易出错的特性。Java所实现的面向对象的特性,降低了程序的复杂性,实现了代码的可重用性,提高了运行效率。

  • 类的声明格式

[修饰符]class 类名 [extends 超类名][implements 接口名]

类主体

修饰符包含访问权限有两种,要么默认,要么public。如果在一个源文件中有多个类的话,只能有一个类的权限可以是public,其余的类的权限必须是默认。public类的名字应该和文件同名,同时main函数也要放在该类中。Java中public权限指所有的类都可以访问,而默认的访问权限则是指只允许同一个包的类进行访问。

        final:final修饰的类为最终类,这种类不能被继承。

     abstract:抽象类,不能实例化

  • 成员变量

[修饰符][static][final][transient] 变量类型 变量名;

修饰符:默认的,public,protected,private

static:静态变量

final:常量

transient:临时变量

  • 成员方法

[修饰符]返回类型 方法名(参数表)[throws <异常类>]

{

方法体;

}

这里的修饰符包含访问权限,共有四种,即:默认的,public,protected,private。

        static:静态方法

        abstract:抽象方法(无方法体的方法)

        final:最终方法(不能被子类继承的方法)

        throws:抛出异常

  • 访问权限的说明

public:所有的类都能访问

protected:不同包的子类可以访问

默认:同一包能访问

private:同一类可以访问

三、对象的构造和初始化以及对象的销毁

  • 构造方法

构造方法没有返回值,且构造方法的名字应该和这个类一致。

例如:Date(int m,int n){...}

在创建对象的时候会自动调用相应的构造方法。

  • 对象的销毁

对象的生命周期是指对象的创建、使用和销毁这一过程。对象的销毁是指当对象使用完成后,释放对象占用的资源。

Java能自动判断对象是否在使用,并自动销毁不在使用的对象,收回对象所占用的资源。在这种模式下我们并不知道对象销毁的具体时间。

此外,我们可以在程序中定义finalize()方法,使得对象在销毁之前执行该方法。该方法的基本格式如下:

[修饰符]void finalize(){}

java提供finalize()方法,垃圾回收器准备释放内存的时候,会先调用finalize()。

(1).对象不一定会被回收。

(2).垃圾回收不是析构函数。

(3).垃圾回收只与内存有关。

(4).垃圾回收和finalize()都是靠不住的,只要JVM还没有快到耗尽内存的地步,它是不会浪费时间进行垃圾回收的。

四、静态成员

类中有一种特殊的成员,他不属于某一个单独的对象,而是属于整个类所有。另外,Java中static不可以用来修饰局部变量。静态成员函数只能访问静态成员变量。

五、类的继承

如果要扩展原有的程序的功能,可以对原来的类进行修改或增加一个新类,但是这样就不符合开闭原则了。同时,也会影响原来的类的相关代码,或者造成代码的重复。

一种好的方法是通过继承来重用已有的代码,同时增加新的代码来进行功能的扩展。

继承是面向对象设计的重要方法,被继承的类称为超类,从超类派生的新类称为子类。子类中包含两个部分,一个是从超类中继承下来的变量和方法,一个是自己新增加的方法和变量。

Java中只支持单重继承,不支持多重继承,所以一个类只能有一个超类。

  • 声明子类

[修饰符]class 子类名 extends 超类名

{...}

子类的对象也是超类的对象,超类的对象不一定是子类的对象。

成员变量的继承规则:子类只继承超类中非private的部分;

     隐藏原则(hiding):子类的成员变量和超类的成员变量同名的时候,超类的成员变量被隐藏。

成员方法的继承规则:子类只继承超类中非private的部分;

       覆盖原则(Override):子类的成员方法和超类的成员方法同名的时候,超类的成员方法被子类的成员方法覆盖。

  • 子类的构造方法

在调用子类的构造方法的时候,需要先调用超类的构造方法,子类的构造方法的参数的前面几个,是给超类的构造方法使用的。在子类的构造方法体中,使用super进行显示的调用超类的构造方法,并将此语句放在构造方法体的最前面。如果超类中有默认的构造方法,那么在子类的构造方法中,可以不显示的调用超类的构造方法。

  • null,this,super

null:表示空对象,即没有创建类的任何实例。

this:代指当前的对象,是对象的引用。访问本类的成员,this.<变量名>,this.<方法名>,调用本类的构造方法this(参数表);

super:超类的引用,可以使用super来引用被子类屏蔽的超类的成员,super.<变量名>,super.<方法名>,调用超类的构造方法super(参数表);

六、最终类和抽象类

  • 最终类和最终方法

被final修饰的类和方法称为最终类和最终方法,这种类无法被继承,这种方法不会在子类中被覆盖,也就是说子类中不能有和此方法同名的方法。

final class Last{...};

public final void printsuper(参数表){...};

  • 抽象类和抽象方法

抽象方法是必须在子类被覆盖的方法,在声明的时候,用关键字abstract将方法说明为抽象方法,并不设方法体。

含有抽象方法的类为抽象类,也需要用abstract修饰,他是一种不能实例化的类。

abstract class <类名>{...abstract 方法}

proected abstract void write();

注意:对于成员方法,不能同时使用static和abstract说明,因为static不用实例化就可以调用,而abstract必须进行实例化实现。

对于类,不能同时使用final和abstract进行修饰,因为这两种方式明显是相反的。

七、类的多态性

多态是指同一名称,多种实现。多态的实现主要通过重载(overloading)和覆盖(override)来完成。

  • 重载

方法的名字相同,但参数不同(注意仅返回值不同不能算作重载),称为重载。在执行的时候,根据参数的不同来决定执行哪个方法。

  • 覆盖

子类和超类中有同名的方法,且参数也相同,子类中的方法将覆盖超类的方法。

* 前期绑定和后期绑定的概念

对于方法的重载,在程序编译的时候,根据调用语句中给出的参数,就可以决定在程序中执行时调用的版本,这种称为编译时的绑定,也叫做前期绑定;

对于方法的覆盖,要在程序执行时,才能决定调用同名方法的版本,这称为运行时的绑定,也叫做后期绑定。

八、接口

在Java中,由于不支持多重继承,所以引入了接口的概念。一个类可以有一个超类和多个接口。Java中的面向对象编程也被戏称为面向接口编程。足见接口的概念的重要性。

  • 接口的声明

接口是一个特殊的类,他是由静态常量和抽象方法组成的,并且不包含变量和方法的实现

[修饰符] interface 接口名{...}

其中修饰符可以是public或者默认访问控制。

接口中的变量默认是static final ,且必须被赋初值。如果接口是public,那么接口中的成员都隐含是public访问权限。

  • 接口的实现

一个接口可以被一个类或者多个类实现。当一个类实现了一个接口,它必须实现这个接口中的所有方法,这些方法都要被说明成public。使用关键词implements实现接口。

class 类名 implements 接口1,接口2...

Java-Java面向对象程序设计的更多相关文章

  1. Java Day03 面向对象程序设计

    1.面向对象 面向对象是指一种程序设计泛型,同时也是一种程序开发的方法. 2.类 类是一种抽象的概念,类中包含了数据与对数据的操纵. 具有相同特性(数据元素)和行为(功能)的对象的抽象就是类.类是对象 ...

  2. 201871010107-公海瑜《面向对象程序设计(java)》第十一周学习总结

    201871010107-公海瑜<面向对象程序设计(java)>第十一周学习总结           项目                              内容   这个作业属于 ...

  3. 实验二 Java面向对象程序设计

    实验二 Java面向对象程序设计 实验内容 1. 初步掌握单元测试和TDD 2. 理解并掌握面向对象三要素:封装.继承.多态 3. 初步掌握UML建模 4. 熟悉S.O.L.I.D原则 5. 了解设计 ...

  4. 20145212《Java程序设计》实验报告二 《 Java面向对象程序设计》

    20145212 实验二< Java面向对象程序设计> 实验内容 单元测试 三种代码 伪代码 百分制转五分制: 如果成绩小于60,转成"不及格" 如果成绩在60与70之 ...

  5. 20145213《Java程序设计》实验二Java面向对象程序设计实验报告

    20145213<Java程序设计>实验二Java面向对象程序设计实验报告 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装,继承,多态 初步掌握UML建模 熟悉S.O. ...

  6. 20145206《Java程序设计》实验二Java面向对象程序设计实验报告

    20145206<Java程序设计>实验二Java面向对象程序设计实验报告 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O. ...

  7. 20145308刘昊阳 《Java程序设计》实验二 Java面向对象程序设计 实验报告

    20145308刘昊阳 <Java程序设计>实验二 Java面向对象程序设计 实验报告 实验名称 Java面向对象程序设计 实验内容 初步掌握单元测试和TDD 理解并掌握面相对象三要素:封 ...

  8. Java程序设计 实验二 Java面向对象程序设计

    北京电子科技学院(BESTI) 实     验    报     告 课程:Java程序设计 班级:1353  姓名:李海空  学号:20135329 成绩:             指导教师:娄嘉鹏 ...

  9. 20145113 实验二 Java面向对象程序设计

    20145113 实验二 Java面向对象程序设计 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O.L.I.D原则 了解设计模式 1.初 ...

  10. JAVA课程实验报告 实验二 Java面向对象程序设计

    北京电子科技学院(BESTI) 实     验    报     告 课程:Java程序设计  班级:1353  姓名:韩玉琪  学号:20135317 成绩:             指导教师:娄嘉 ...

随机推荐

  1. 文件操作(CRT、C++、WIN API、MFC)

    一.使用CRT函数文件操作 二.使用标准C++库 std::fstream std::string 1)std::string对象内部存储了一个C的字符串,以'\0'结尾的. 2)std::strin ...

  2. zw版【转发·台湾nvp系列Delphi例程】HALCON Regiongrowing

    zw版[转发·台湾nvp系列Delphi例程]HALCON Regiongrowing procedure TForm1.Button1Click(Sender: TObject);var img : ...

  3. 20154312《网络对抗》Exp2 后门原理与实践

    常见问题快速链接 Handler failed to bind to xxx.xxx.xx.xxx:xxxx 使用Webcam_snap命令提示1411错误,无法正常拍照 常用后门工具实践 Windo ...

  4. mysql事务(二)——控制语句使用

    事务控制 一般来说,mysql默认开启了事务自动提交功能,每条sql执行都会提交事务.可以使用如下语句关闭事务自动提交功能. show session variables like 'autocomm ...

  5. DeepMind已将AlphaGo引入多领域 Al泡沫严重

    DeepMind已将AlphaGo引入多领域 Al泡沫严重 在稳操胜券的前提下,谷歌旗下的AlphaGo还是向柯洁下了战书.4月10日,由中国围棋协会.浙江省体育局.谷歌三方联合宣布,将于5月23日至 ...

  6. php随笔10-thinkphp 3.1.3 模板继承 布局

    8.25 模板继承 模 板继承是3.1.2版本添加的一项更加灵活的模板布局方式,模板继承不同于模板布局,甚至来说,应该在模板布局的上层.模板继承其实并不难理解,就好比类 的继承一样,模板也可以定义一个 ...

  7. yum配合rpm查看软件包安装位置

    今天安装apache,新版本要求除了apache的安装包以外,还要求先安装apr.apr-util和pcre. 开始并没有急着去下载apr的安装包,而是想看看我的操作系统中有没有安装过了这个软件,结果 ...

  8. JAVA学习调查问卷——20145101

    1.你对自己的未来有什么规划?做了哪些准备? 我希望在未来不管自己是否从事机要工作,都要做一个有能力,对社会能有所贡献的人.所以在现阶段我应该努力学习基础知识,夯实基本功,具备成为合格机要人的素质. ...

  9. 20145216史婧瑶《网络对抗》逆向及Bof进阶实践

    20145216史婧瑶<网络对抗>逆向及Bof进阶实践 基础知识 Shellcode实际是一段代码,但却作为数据发送给受攻击服务器,将代码存储到对方的堆栈中,并将堆栈的返回地址利用缓冲区溢 ...

  10. 20145334赵文豪《网络攻防》 MSF基础应用

    实践目标 掌握metasploit的基本应用方式 掌握常用的三种攻击方式的思路. 实验要求 一个主动攻击,如ms08_067 一个针对浏览器的攻击,如ms11_050 一个针对客户端的攻击,如Adob ...