资讯专栏INFORMATION COLUMN

Java™ 教程(面向对象编程概念)

FuisonDesign / 453人阅读

面向对象编程概念

如果你以前从未使用过面向对象的编程语言,那么在开始编写任何代码之前,你需要学习一些基本概念,本课将向你介绍对象、类、继承、接口和包,每个讨论都关注这些概念如何与现实世界相关,同时介绍Java编程语言的语法。

什么是对象?

对象是理解面向对象技术的关键,环顾四周,你会发现许多现实世界中的东西:你的狗,你的桌子,你的电视机,你的自行车。

真实世界的对象有两个特征:它们都有状态和行为,狗有状态(名字,颜色,品种,饥饿)和行为(吠叫,挑逗,摇尾巴),自行车也有状态(当前齿轮,当前踏板节奏,当前速度)和行为(换档,改变踏板节奏,踩刹车),识别真实对象的状态和行为是开始考虑面向对象编程的好方法。

现在花一分钟观察你周围的真实世界,对于你看到的每一个物体,问自己两个问题:“这个对象可能处于什么状态?”和“这个对象可能执行什么行为?”,一定要写下你的观察结果,正如你所做的,你会注意到现实世界中的对象在复杂性上是不同的;你的台灯可能只有两个可能的状态(打开和关闭)和两个可能的行为(打开和关闭),但是你的桌面收音机可能有其他状态(打开、关闭、当前音量、当前站)和行为(打开、关闭、增加音量、减少音量、查找、扫描和调优)。你可能还注意到,一些对象反过来也将包含其他对象,这些实际的观察结果都转化为面向对象编程的世界。

软件对象在概念上与真实世界的对象相似:它们也包括状态和相关的行为,对象将其状态存储在字段中(某些编程语言中的变量),并通过方法(某些编程语言中的函数)公开其行为,方法对对象的内部状态进行操作,并作为对象到对象通信的主要机制,隐藏内部状态并要求通过对象的方法执行所有交互称为数据封装 — 面向对象编程的基本原则。

以自行车为例:

通过归因于状态(当前速度,当前踏板节奏和当前档位)并提供改变该状态的方法,该对象仍然控制外部世界如何被允许使用它,例如,如果自行车仅具有6个档位,则换档的方法可以拒绝小于1或大于6的任何值。

将代码打包到多带带的软件对象中可以带来很多好处,包括:

模块化:对象的源代码可以独立于其他对象的源代码编写和维护,一旦创建,对象可以很容易地在系统内部传递。

信息隐藏:通过只与对象的方法交互,其内部实现的细节仍然隐藏在外部世界之外。

代码重用:如果一个对象已经存在(可能由另一个软件开发人员编写),你可以在程序中使用该对象,这允许专门实现/测试/调试复杂的、特定于任务的对象,然后你可以信任这些对象在你自己的代码中运行。

可插入性和调试方便:如果某个特定对象出现问题,你可以简单地从应用程序中删除它,并将另一个对象插入替换,这类似于在现实世界中解决机械问题,如果螺栓断裂,你要更换它,而不是整个机器。

什么是类?

在现实世界中,你经常会发现许多多带带的物体都是一样的,可能还有成千上万的其他自行车存在,所有的制造和模型都是一样的,每一辆自行车都是用同样一套蓝图建造的,因此包含了同样的部件,在面向对象的术语中,我们说你的自行车是称为自行车的对象类的实例,类是创建单个对象的蓝图。

下面的Bicycle类是自行车的一种可能实现:

class Bicycle {

    int cadence = 0;
    int speed = 0;
    int gear = 1;

    void changeCadence(int newValue) {
         cadence = newValue;
    }

    void changeGear(int newValue) {
         gear = newValue;
    }

    void speedUp(int increment) {
         speed = speed + increment;   
    }

    void applyBrakes(int decrement) {
         speed = speed - decrement;
    }

    void printStates() {
         System.out.println("cadence:" +
             cadence + " speed:" + 
             speed + " gear:" + gear);
    }
}

Java编程语言的语法对你来说是全新的,但是这个类的设计是基于之前对自行车对象的讨论,字段cadencespeed以及gear表示对象的状态,方法(changeCadencechangeGearspeedUp等)定义了它与外部世界的交互。

你可能已经注意到,Bicycle类不包含main方法,那是因为它不是一个完整的应用程序;这只是在应用程序中使用的自行车的蓝图,创建和使用新的Bicycle对象的职责属于应用程序中的其他类。

这里有一个BicycleDemo类,它创建两个独立的Bicycle对象并调用它们的方法:

class BicycleDemo {
    public static void main(String[] args) {

        // Create two different 
        // Bicycle objects
        Bicycle bike1 = new Bicycle();
        Bicycle bike2 = new Bicycle();

        // Invoke methods on 
        // those objects
        bike1.changeCadence(50);
        bike1.speedUp(10);
        bike1.changeGear(2);
        bike1.printStates();

        bike2.changeCadence(50);
        bike2.speedUp(10);
        bike2.changeGear(2);
        bike2.changeCadence(40);
        bike2.speedUp(10);
        bike2.changeGear(3);
        bike2.printStates();
    }
}

此测试的输出打印两辆自行车的cadencespeedgear

cadence:50 speed:10 gear:2
cadence:40 speed:20 gear:3
什么是继承?

不同种类的物体之间往往有一定的共同之处,例如山地自行车、公路自行车和双人自行车,都有自行车的特点(目前的速度,目前的踏板节奏,目前的档位),然而,每个还定义了使它们不同的其他功能:双人自行车有两个座位和两套车把;公路自行车有弯车把;一些山地自行车有一个额外的链环,使它们的齿轮比更低。

面向对象编程允许类从其他类继承共同的状态和行为,在这个例子中,Bicycle现在成为了MountainBikeRoadBikeTandemBike的超类,在Java编程语言中,每个类都允许有一个直接的超类,每个超类都可能有无限数量的子类:

创建子类的语法很简单,在类声明的开头,使用extend关键字,后跟要继承的类的名称:

class MountainBike extends Bicycle {

    // new fields and methods defining 
    // a mountain bike would go here

}

这使MountainBike拥有与Bicycle相同的字段和方法,但它的代码却只关注使它独一无二的特性,这使得子类的代码易于阅读,但是,莫必须注意正确记录每个超类定义的状态和行为,因为该代码不会出现在每个子类的源文件中。

什么是接口?

正如你已经了解的,对象通过它们公开的方法定义它们与外部世界的交互,方法形成对象与外界的接口;例如,电视机前的按钮是你和塑料外壳另一面的电线之间的接口,你按下“电源”按钮,打开和关闭电视。

在最常见的形式中,接口是一组具有空体的相关方法,自行车的行为(如果指定为接口)可能如下所示:

interface Bicycle {

    //  wheel revolutions per minute
    void changeCadence(int newValue);

    void changeGear(int newValue);

    void speedUp(int increment);

    void applyBrakes(int decrement);
}

要实现这个接口,你的类的名称将会改变(例如,对特定品牌的自行车,例如ACMEBicycle),并且你将在类声明中使用implements关键字:

class ACMEBicycle implements Bicycle {

    int cadence = 0;
    int speed = 0;
    int gear = 1;

   // The compiler will now require that methods
   // changeCadence, changeGear, speedUp, and applyBrakes
   // all be implemented. Compilation will fail if those
   // methods are missing from this class.

    void changeCadence(int newValue) {
         cadence = newValue;
    }

    void changeGear(int newValue) {
         gear = newValue;
    }

    void speedUp(int increment) {
         speed = speed + increment;   
    }

    void applyBrakes(int decrement) {
         speed = speed - decrement;
    }

    void printStates() {
         System.out.println("cadence:" +
             cadence + " speed:" + 
             speed + " gear:" + gear);
    }
}

实现接口允许类对其承诺提供的行为变得更加正式,接口在类和外部世界之间形成契约,并且该契约在构建时由编译器强制执行,如果你的类声称实现了一个接口,那么在该类成功编译之前,该接口定义的所有方法必须出现在其源代码中。

要实际编译ACMEBicycle类,你需要将public关键字添加到已实现的接口方法的开头,稍后你将在有关类和对象以及接口和继承的课程中了解相关原因。
什么是包?

包是组织一组相关类和接口的命名空间,从概念上来说,你可以将包看作类似于计算机上的不同文件夹,你可以将HTML页面保存在一个文件夹中,将图像保存在另一个文件夹中,将脚本或应用程序保存在另一个文件夹中。因为用Java编程语言编写的软件可以由数百或数千个多带带的类组成,所以通过将相关的类和接口放置到包中来组织事情是有意义的。

Java平台提供了一个庞大的类库(一组包),可以在你自己的应用程序中使用,这个库被称为“应用程序编程接口”,简称为“API”,它的包代表了最常用于通用编程的工作。例如,String对象包含字符串的状态和行为;File对象允许程序员轻松地在文件系统上创建、删除、检查、比较或修改文件;Socket对象允许创建和使用网络sockets;各种GUI对象控制按钮和复选框以及与图形用户界面相关的任何其他内容。实际上有成千上万个类可供选择,这允许程序员关注特定应用程序的设计,而不是使其工作所需的基础设施。

Java平台API规范包含Java SE平台提供的所有包、接口、类、字段和方法的完整清单,在浏览器中加载该页面并将其添加到书签,作为程序员,它将成为你最重要的参考文档。

上一篇:常见问题(及其解决方案) 下一篇:变量

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/76445.html

相关文章

  • Java教程(目录)

    Java™ 教程 Java教程是为JDK 8编写的,本页面中描述的示例和实践没有利用在后续版本中引入的改进。 Java教程是希望使用Java编程语言创建应用程序的程序员的实用指南,其中包括数百个完整的工作示例和数十个课程,相关课程组被组织成教程。 覆盖基础知识的路径 这些教程以书籍的形式提供,如Java教程,第六版,前往Amazon.com购买。 入门 介绍Java技术和安装Java开发软件并使用...

    lifesimple 评论0 收藏0
  • 区块链开发中使用的最流行的编程语言

    摘要:我们目前正处于一个新兴的区块链开发行业中。,一种在以太坊开发人员中流行的新的简单编程语言,因为它是用于开发以太坊智能合约的语言。它是全球至少万开发人员使用的世界上最流行的编程语言之一。以太坊,主要是针对工程师使用进行区块链以太坊开发的详解。 我们目前正处于一个新兴的区块链开发行业中。区块链技术处于初期阶段,然而这种颠覆性技术已经成功地风靡全球,并且最近经历了一场与众不同的繁荣。由于许多...

    2shou 评论0 收藏0
  • 【三万粉丝终极福利】Python、C、Java三大语言学习路线和资源整理

    摘要:今天给大家带来三万粉丝三大语言学习路线和资源整理,收藏就对了。还有对数组面向对象和异常处理等。语言学习路线一基础阶段技能树掌握脚本界面编程能力数据库基本爬虫多线程多进程开发能力,可以胜任基本的开发工作。 大家好,我是辣条。 今天给大家带来三万粉丝三大语言学习路线和资源整理,收藏就对了。 目录...

    GitChat 评论0 收藏0
  • 11个最值得Java开发者收藏的网站

    摘要:是领域最具代表性的问答网站之一。在,开发者能够为各种相关的开源代码贡献自己的力量,也可以发布软件开发项目。该网站发布各技术领域的高技术含量内容,例如大数据,云计算,,物联网,开发等。是一个大型的资源类网站,主要涉及源代码和代码示例。 Java是一种面向对象的编程语言,由Sun Microsystems公司在1995年的时候正式发布。直到今天,Java都一直是最受欢迎的编程语言之一。如今...

    WrBug 评论0 收藏0
  • Java入门请不要放弃,学习路线以及侧重点分析

    摘要:而面向搜索引擎,就是我们要及时的使用百度谷歌遇到问题无法解决,先别急着放弃,可以去网络寻找答案,你的坑大部分别人都已经走过了,大部分都可以找到合适的解决方案。 showImg(https://segmentfault.com/img/remote/1460000019236352?w=866&h=456); 前言: ●众多的语言,到底哪一门才是适合我的?●我们为什么要学习Java语言呢...

    mochixuan 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<