全屏

本教程将通过示例了解Java中面向对象(OOP)的概念。讨论面向对象编程的特性,以及编写面向对象程序包括创建类,并从这些类创建对象,以及创建应用程序,这些应用程序是使用这些对象的独立可执行程序。

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

对象是什么?

对象是相关状态和行为的软件包。软件对象通常用于模拟在日常生活中发现的真实世界对象。本课解释如何在对象中表示状态和行为,介绍数据封装的概念,并解释以这种方式设计软件的好处。更多关于对象,可点击以下链接了解 -

类是什么?

类是创建对象的蓝图或原型。这个部分定义了一个模型化真实世界对象的状态和行为的类。 它有意地专注于基础,显示一个简单的类如何干净地建模状态和行为。更多关于类的介绍,可点击以下链接了解 -

继承是什么?

继承提供了一个强大和自然的机制来组织和结构化软件。本节介绍类如何从其父类继承状态和行为,并解释如何使用Java编程语言提供的简单语法从另一个类派生一个类。更多关于继承的介绍,可点击以下链接了解 -

接口是什么?

接口是类和外部世界之间的契约。当一个类实现一个接口时,它承诺提供由该接口发布的行为。本节定义一个简单的接口,并解释实现它的任何类的必要的更改。更多关于接口的介绍,可点击以下链接了解 -

包是什么?

包是以逻辑方式组织类和接口的命名空间。将代码放入包中使得大型软件项目更容易管理。 本节解释为什么包是这么有用,并介绍由Java平台提供的应用程序编程接口(API)。更多关于包的介绍,可点击以下链接了解 -

类是定义对象的数据字段和方法的模板,蓝图或约定。对象是类的实例。一个类可以创建多个实例。Java类使用变量来定义数据字段和方法来定义操作。此外,类提供了一种特殊类型的方法,称为构造函数,调用它们来创建一个新对象。构造函数可以执行任何操作,但构造函数一般设计为执行初始化操作,例如:初始化对象的数据字段。参考以下图,类可被实例化为一个个的对象 -

对象由属性和方法组成。 属性是定义对象的特征; 属性中包含的值将同一个类的对象区分开来。为了更好地理解这一点,以手机(Mobile)作为一个对象。手机(Mobile)具有像模型,制造商,成本,操作系统等特性。因此,如果创建“华为”手机对象和“IPhone”手机对象,它们的特性是不一样的,因此每个对象是不一样的。对象的属性的值也称为对象的状态。

Java面向对象编程有三个主要特点。封装

继承

多态性

我们对上面每个特性作更详细讨论和学习。

封装

封装意味着将所有变量(实例变量)和方法放在一个称为类的单元中,在对象内隐藏数据和方法。 封装提供了保证数据和方法免于被意外更改的安全性。程序员有时将封装称为使用“黑盒”,或者可以使用而不考虑内部实现机制。 程序员可以访问和使用黑盒中包含的方法和数据,但不能更改它们。下面示例显示了Mobile类和属性,在使用构造函数参数创建对象时设置一次对象信息。可以使用具有公共(public)访问修饰符的getXXX()方法来访问属性。package oopsconcept;

public class Mobile {

private String manufacturer;

private String operating_system;

public String model;

private int cost;

//Constructor to set properties/characteristics of object

Mobile(String man, String o,String m, int c){

this.manufacturer = man;

this.operating_system=o;

this.model=m;

this.cost=c;

}

//Method to get access Model property of Object

public String getModel(){

return this.model;

}

// We can add other method to get access to other properties

}

继承

面向对象程序的一个重要特性是继承 - 创建一个新类时共享现有类的属性和方法。继承主要用于代码可重用性。所以利用已有的类并作进一步扩展即可。这就是提高代码的可重用性的一种办法。一般来说,一个定义可以告诉从已有的类派生一个新类,这种实现称为继承。可以查看下面的继承概念示例。这里已有上面的步中创建的Mobile类,它被其他特定类如:Android类和Blackberry类扩展。

Android.java 代码如下 -package oopsconcept;

public class Android extends Mobile{

//Constructor to set properties/characteristics of object

Android(String man, String o,String m, int c){

super(man, o, m, c);

}

//Method to get access Model property of Object

public String getModel(){

return "This is Android Mobile- " + model;

}

}

Blackberry.java 代码如下 -package oopsconcept;

public class Blackberry extends Mobile{

//Constructor to set properties/characteristics of object

Blackberry(String man, String o,String m, int c){

super(man, o, m, c);

}

public String getModel(){

return "This is Blackberry-"+ model;

}

}

多态性

在Java核心中,多态(Polymorphism)是一个容易理解的概念。 多态性定义是:Poly表示许多,morphos表示形式。它描述了允许在基于上下文的不同情况下正确解释相同字或符号的语言的特征。在Java中有两种类型的多态性。 例如,在英语中,动词“run”表示不同的东西,如果在“足迹”,“商业”或“电脑”这个东西关联。那么理解“run”的含义应该是基于与它使用的其他词。面向对象的程序可编写使用相同名称的方法,但在不同的上下文中执行不同的工作。 Java提供了两种实现多态的方法。

1. 静态多态性(编译时多态性/方法重载):通过改变方法名称和参数来执行不同方法实现的能力被称为方法重载。在下面的程序中,有三个打印(print())方法,每个方法有不同的参数。当要正确重载一个方法时,可以调用它提供不同的参数列表,并执行相应的方法版本。package oopsconcept;

class Overloadsample {

public void print(String s){

System.out.println("First Method with only String- "+ s);

}

public void print (int i){

System.out.println("Second Method with only int- "+ i);

}

public void print (String s, int i){

System.out.println("Third Method with both- "+ s + "--" + i);

}

}

public class PolymDemo {

public static void main(String[] args) {

Overloadsample obj = new Overloadsample();

obj.print(10);

obj.print("Amit");

obj.print("Hello", 100);

}

}

执行上面代码,输出结果如下 -

2. 动态多态性(运行时多态性/方法覆盖)

当通过扩展现有类创建子类时,新子类包含在原始超类中定义的数据和方法。换句话说,任何子类对象都具有其父对象的所有属性。然而,有时,超类数据字段和方法不完全适合于子类对象; 在这些情况下可考虑覆盖父类成员。下面举个例子说明继承。package oopsconcept;

public class OverridingDemo {

public static void main(String[] args) {

//Creating Object of SuperClass and calling getModel Method

Mobile m = new Mobile("Nokia", "Win8", "Lumia",10000);

System.out.println(m.getModel());

//Creating Object of Sublcass and calling getModel Method

Android a = new Android("Samsung", "Android", "Grand",30000);

System.out.println(a.getModel());

//Creating Object of Sublcass and calling getModel Method

Blackberry b = new Blackberry("BlackB", "RIM", "Curve",20000);

System.out.println(b.getModel());

}

}

抽象

所有编程语言都提供抽象。可以说,能够解决的问题的复杂性与抽象的种类和质量直接相关。面向对象编程的一个基本要素是抽象。人类通过抽象来管理复杂性。当你开车时,不必关心汽车的确切内部工作(除非你是一个技工)。关心的是通过其接口,如方向盘,制动踏板,加速踏板等与汽车交互。各种汽车制造商有不同的实施汽车工作,但其基本接口没有改变(即仍然使用方向盘,刹车踏板,加速踏板等与汽车互动)。 因此,对汽车的知识是抽象的。

管理抽象的强大方法是通过使用层次化分类。这允许分层复杂系统的语义,将它们分成更易于管理的部分。从外面,一辆汽车是一个单一的对象。汽车由几个子系统组成:转向,制动器,音响系统,安全带,暖气,蜂窝电话等。反过来,这些子系统中的每一个由更专门的单元组成。 例如,声音系统由无线电,CD播放器和/或磁带播放器组成。关键是通过使用分层抽象来管理汽车(或任何其他复杂系统)的复杂性。

抽象类是不完整的东西,不能创建抽象类的实例。如果想使用它,需要通过扩展它来完成或具体的实现。如果一个类不包含任何抽象方法,并且实现了所有抽象方法继承自已实现或扩展的抽象类或接口,那么它被称为具体类。顺便说一下,Java有抽象类的概念,抽象方法,但是变量不能在Java中抽象。

让我们举一个名为Vehicle的Java抽象类的例子。当创建一个类叫Vehicle,知道应该有像start()和Stop()的方法,但不知道每个车辆的启动和停止机制,因为可以有不同的启动和停止机制,例如:可以通过按按钮启动。

抽象的优点是:一个新类型的车辆只需要创建一个新类,扩展 VehicleAbstract 类并实现它的方法:启动-start()和停止-stop()方法的接口都是一样的。package oopsconcept;

public abstract class VehicleAbstract {

public abstract void start();

public void stop(){

System.out.println("Stopping Vehicle in abstract class");

}

}

class TwoWheeler extends VehicleAbstract{

@Override

public void start() {

System.out.println("Starting Two Wheeler");

}

}

class FourWheeler extends VehicleAbstract{

@Override

public void start() {

System.out.println("Starting Four Wheeler");

}

}

Java

package oopsconcept;

public class VehicleTesting {

public static void main(String[] args) {

VehicleAbstract my2Wheeler = new TwoWheeler();

VehicleAbstract my4Wheeler = new FourWheeler();

my2Wheeler.start();

my2Wheeler.stop();

my4Wheeler.start();

my4Wheeler.stop();

}

}

执行上面代码,输出结果如下 -

分享到:

0评论

java面向对象设计_Java面向对象设计相关推荐

  1. java atm柜机_java课程设计-ATM柜机模拟程序.doc

    java课程设计-ATM柜机模拟程序 课程设计(大作业)报告课程名称:面向对象程序设计课程设计 设计题目:ATM柜员机模拟程序 院 系:信息技术学院 班 级: 设 计 者: 学 号: 指导教师: 设计 ...

  2. java蜘蛛纸牌课程设计_Java课程设计-蜘蛛纸牌游戏.doc

    Java课程设计-蜘蛛纸牌游戏.doc 还剩 33页未读, 继续阅读 下载文档到电脑,马上远离加班熬夜! 亲,很抱歉,此页已超出免费预览范围啦! 如果喜欢就下载吧,价低环保! 内容要点: Java 课 ...

  3. java 面向组件_Java 面向对象

    面向对象: 1, 面向过程的思想 准备去一个地方: 先买车, 挂牌, 开导航, 踩油门, 过黄河, 穿越珠穆朗玛峰... 2, 面向对象的思想 我开着车去, 车怎么去随便 所有去这个地方的信息, 全部 ...

  4. java闹钟程序设计_JAVA课程设计_闹钟的设计与实现项目-报告_附源代码.doc

    JAVA课程设计_闹钟的设计与实现项目-报告_附源代码 第2章 MACROBUTTON AcceptAllChangesInDoc [双击此处键入1级标题] PAGE 2 - PAGE 1 - .. ...

  5. java模拟时钟课程设计_java课程设计-时钟图形模拟

    java课程设计-时钟图形模拟 计算机与信息工程系 <高级语言程序设计>课程设计报告课 程 设 计 任 务 书专 业 通信工程 班 级 13 级四班 姓 名 张凯铭设 计 起 止 日 期设 ...

  6. java打字游戏课程设计_Java课程设计打字游戏.docx

    中南大学 Java 课程设计报告 题 目 打字游戏 学生姓名 窦立阳 指导教师 陈丽萍 学 院 信息科学与工程学院 专业班级 计科 1204 完成时间 2015 年1月15日 目录 第二章 总体设计 ...

  7. java购物车设计_Java面向对象课程设计——购物车

    Java面向对象课程设计--购物车 小组成员:余景胜.刘格铭.陈国雄.达瓦次仁 一.前期调查 流程 客人(Buyer)先在商城(Mall)中浏览商品(Commidity),将浏览的商品加入购物车(Sh ...

  8. 斗地主Java课程设计_JAVA面向对象编程课程设计——web版斗地主

    一.团队课程设计博客链接 二.个人负责模块或任务说明 实体类的设计 斗地主规则的实现 人机自动出牌的算法 实现数据库的DAO模式 三.自己的代码提交记录 注:这里只有部分提交记录,详细的提交记录在团队 ...

  9. java面向对象设计_Java面向对象设计 构造函数设计

    在Javascript面向对象设计一--工厂模式 中介绍了使用CreateEmployee()函数创建员工类.ECMAScript中的构造函数可以用来创建特定类型的对象,如Object和Array这样 ...

最新文章

  1. html5和前端精要(2)-架构与基础(2)
  2. python for循环九九乘法表_python3:使用for循环打印九九乘法表
  3. shell数值运算的方法
  4. sublime-编辑器的使用-基本
  5. Javascript中最常用的经典技巧
  6. Fix Corrupt Blocks on HDFS
  7. HashSet源码阅读
  8. 关于安装更新office版本时,需要卸载office所遇到的问题
  9. stm32mp1 Cortex M4开发篇6:TIM定时器中断
  10. Windows10 创建Django项目
  11. 怎样在图片上编辑文字?这几种方法可以进行简单的编辑
  12. 手机浏览器播放mp3等音乐(chrome特殊)
  13. 32个FPGA开源网站
  14. 查询2021高考成绩位次,2021年江苏高考位次表及高考个人成绩排名查询
  15. 实验1:MapReduce课程实验
  16. 常微分方程组的四阶RungeKutta龙格库塔法matlab实现
  17. Kimbal Musk 介绍:埃隆马斯克的弟弟
  18. 音频单元组件服务参考(Audio Unit Component Services Reference)
  19. Linux性能学习(1.4):CPU_如何查看CPU上下文切换参数
  20. turtle绘画-移动落笔点(改变初始原点)

热门文章

  1. 《MPLS在Cisco IOS上的配置》一第 1 章 MPLS概述1.1 IP转发过程概述
  2. matlab做聚类分析
  3. 12款很酷的使用大头照的国外名片设计作品
  4. 浅谈!important对CSS的重要性
  5. for update行级锁的作用
  6. struct、union、enum and sizeof
  7. systemtap notes
  8. Hibernate框架 主配置文件 Hibernate.cfg.xml 映射配置 说明
  9. 用极大化思想解决最大子矩形问题
  10. 可适配平板、手机的Web开发方式