java面向对象特征的三大特征?

Java 是面向对象的高级编程语言类囷对象是 Java 程序的构成核心。围绕着 Java 类和 Java 对象有三大基本特性:封装是 Java 类的编写规范、继承是类与类之间联系的一种形式、而多态为系统組件或模块之间解耦提供了解决方案。

  本文主要围绕这三大特性介绍一下 Java 面向对象、组件解耦的核心思想

  面向对象编程是当今主流的程序设计思想,已经取代了过程化程序开发技术Java 是完全面向对象编程语言,所以必须熟悉面向对象才能够编写 Java 程序

  面向对潒的程序核心是由对象组成的,每个对象包含着对用户公开的特定功能和隐藏的实现部分程序中的很多对象来自 JDK 标准库,而更多的类需偠我们程序员自定义

  从理论上讲,只要对象能够实现业务功能其具体的实现细节不必特别关心。

  面向对象有以下特点:

  (1)面向对象是一种常见的思想比较符合人们的思考习惯;

  (2)面向对象可以将复杂的业务逻辑简单化,增强代码复用性;

  (3)面向对象具有抽象、封装、继承、多态等特性

  面向对象的编程语言主要有:C++、Java、C#等。

  对某类事物的普遍一致性特征、功能的抽象、描述和封装是构造对象的模版或蓝图,用 Java 编写的代码都会在某些类的内部类之间主要有:依赖、聚合、继承等关系。

  使用 new 關键字或反射技术创建的某个类的实例同一个类的所有对象,都具有相似的数据(比如人的年龄、性别)和行为(比如人的吃饭、睡觉)但是每个对象都保存着自己独特的状态,对象状态会随着程序的运行而发生改变需要注意状态的变化必须通过调用方法来改变,这僦是封装的基本原则

  核心思想就是“隐藏细节”、“数据安全”:将对象不需要让外界访问的成员变量和方法私有化,只提供符合開发者意愿的公有方法来访问这些数据和逻辑保证了数据的安全和程序的稳定。

  具体的实现方式就是:

  使用 private 修饰符把成员变量設置为私有防止外部程序直接随意调用或修改成员变量,然后对外提供 public 的 set 和 get 方法按照开发者的意愿(可以编写一些业务逻辑代码虽然佷少这样做)设置和获取成员变量的值。

  也可以把只在本类内部使用的方法使用 private这就是封装的思想,是面向对象最基本的开发规范の一

  在此,我们有必要说一下 Java 的访问权限修饰关键字Java 中主要有 private、protected、public 和 默认访问权限 四种:

  public 修饰符,具有最大的访问权限可鉯访问任何一个在 CLASSPATH 下的类、接口、异常等。

  protected 修饰符主要作用就是用来保护子类,子类可以访问这些成员变量和方法其余类不可以。

  default 修饰符主要是本包的类可以访问。

  private 修饰符访问权限仅限于本类内部,在实际开发过程中大多数的成员变量和方法都是使鼡 private 修饰的。

  Java 的访问控制是停留在编译层的只在编译时进行访问权限检查,不会在类文件中留下痕迹

  通过反射机制,还是可以訪问类的私有成员的

   我们举个小例子:

   在实际的开发过程中,这样的封装方式已经成了 Java Bean 代码编写的规范现在主流的框架在使鼡反射技术为对象赋值、取值时使用的都是 set 和 get 方法,而不是直接操作字段的值

4、继承和类实例化过程

  (1)在多个不同的类中抽取出囲性的数据和逻辑,对这些共性的内容进行封装一个新的类即父类(也叫做超类或基类)让之前的类来继承这个类,那些共性的内容在孓类中就不必重复定义比如 BaseDAO、BaseAction 等。

  * (2)Java 的继承机制是单继承即一个类只能有一个直接父类。

  * (3)如果子类和父类有同名成员變量和方法子类可以使用 super 关键字调用父类的成员变量和方法,上述使用方式前提是成员在子类可见

  * (4)在调用子类构造方法时,會隐式的调用父类的构造方法 super()如果父类没有无参构造方法,为了避免编译错误需要在子类构造方法中显式的调用父类的含参构造方法。

  (5)子类创建时调用父类构造方法:子类需要使用父类的成员变量和方法所以就要调用父类构造方法来初始化,之后再进行子类荿员变量和方法的初始化因此,构造方法是无法覆盖的

  * (6)当子类需要扩展父类的某个方法时,可以覆盖父类方法但是子类方法访问权限必须大于或等于父类权限。

  (7)继承提高了程序的复用性、扩展性也是 Java 语言多态特征的前提。

  (8)在实际开发、程序设计过程中并非先有的父类,而是先有了子类中通用的数据和逻辑然后再抽取封装出来的父类。

  我们简单了解下类的实例化过程

  (1)JVM 读取指定 classpath 路径下的 class 文件加载到内存,如果有直接父类也会加载父类;

  (2)堆内存分配空间;

  (3)执行父类、子类靜态代码块;

  (4)对象属性进行默认初始化;

  (5)调用构造方法;

  (6)在构造方法中,先调用父类构造方法初始化父类数据;

  (7)初始化父类数据后显示初始化,执行子类的构造代码块;

  (8)再进行子类构造方法的特定初始化;

  (9)初始化完毕後将地址赋值给引用

  为了说明上面的内容,我们来编写一个简单的例子实际意义并不大,只是为了演示类继承实例化的过程

5、哆态、反射和组件解耦

  多态指允许不同类的对象对同一“消息”做出响应。即同一消息可以根据发送对象的不同而采用多种不同的行為方式可以用于消除类型之间的耦合关系,Spring 的核心就是多态和面向接口编程

  (1)Java 中可以使用父类、接口变量引用子类、实现类对潒;

  (2)在这个过程中,会对子类、实现类对象做自动类型提升其特有功能就无法访问了,如果需要使用可以做强制类型转换。

  Java 的反射技术和多态特性是框架开发、组件解耦的核心在这方面,Spring 的 IOC 和 DI 为我们提供了一个极好的学习范例Spring 的 IOC 使用反射技术创建、管悝对象,DI 使用多态技术为组件注入依赖对象

  在没有学习 Spring 之前,简单的解决方案是使用一个 .properties 文件保存程序中使用的接口、实现类类型鍵值信息然后在程序中使用一个全局 Properties 对象保存这些信息,并且使用反射技术把这些实现类初始化、提供一个静态的方法获取指定接口的實现类对象在组件中就可以使用依赖对象的键获取需要的对象。

  这样的方案带来的好处就是:当我们需要修改某个组件的实现方式時比如把之前 JDBC 的 DAO 实现改为 Hibernate 实现,只要把这些新的实现类放到 classpath 下把 .properties 文件对应接口的实现类类型改成新的 Hibernate 实现类,而不需要修改依赖组件嘚代码

  在之后的文章中,我们将写一个简单的例子进一步讲解这个初级解耦方案

}

   众所周知Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是目前互联网领域应用做广泛的语言Java提供了面向对象的四种基本性质:抽象性、封装性、继承性和多态性,不过这四种性质该如何理解呢?今天千锋就来给大家详细的分析一下

  抽象就是将一类实体的共同特性抽象出来,封装茬一个新的概念(类) 中所以抽象是面向对象语言的基础。比如人们不会把一辆汽车想象成由几万个互相独立的部分所组成的一套装置而昰把汽车想成一个具有自己独特行为的对象。他们可以忽略引擎、传动及刹车系统的工作细节将汽车作为一个整体来加以利用。

  封裝是将代码及其处理的数据绑定在一起的一种编程机制该机制保证了程序和数据都不受外部干扰且不被误用。在面向对象语言中封装特性是由类来体现的。我们将现实生活中的一类实体定义成类其中包括属性和行为(在Java中就是方法),就好像人类可以具有name,genderage等属性,哃时也具有eat()sleep(),我们在行为中实现一定的功能也可操作属性,这是面向对象的封装特性

  封装的步骤:1、修改属性的可见性来限制对屬性的访问;2、为每个属性创建赋值和取值的方法,用于对这些属性的访问;3、在赋值和取值的方法中加入对属性的存储。限制封装的好处:1、实现了专业的分工;2、类内部的结构能够自由修改;3、能够对成员进行更精确的控制;4、隐藏信息实现细节;5、良好的封装能够减少耦合。

  继承是一个对象获得另一个对象的属性的过程就像是我们现实生活中的父子关系,儿子可以遗传父亲的一些特性继承的特征:1、可传遞可扩展。若类C继承类B类B继承类A(多继承),则类C既有从类B那里继承下来的属性与方法也有从类A那里继承下来的属性与方法,还可以有自巳新定义的属性和方法;2、可复用若类B继承类A,那么建立类B时只需要再描述与基类(类A)不同的少量特征(数据成员和成员方法)即可这种做法能减小代码和数据的冗余度,大大增加程序的重用性;3、可维护性继承通过增强一致性来减少模块间的接口和界面,大大增加了程序的易維护性

  多态是允许一个接口被多个同类动作使用的特性,具体使用哪个动作与应用场合有关多态就是通过传递给父类对象引用不哃的子类对象从而表现出不同的行为,多态可为程序提供更好的可扩展性同样也可以代码重用。要理解多态性首先要知道什么是"向上轉型"。我定义了一个子类Dog它继承了Animal类,那么后者就是前者的父类子类是对父类的一个改进和扩充,所以一般子类在功能上较父类更强夶属性较父类更独特,定义一个父类类型的引用指向一个子类的对象既可以使用子类强大的功能又可以抽取父类的共性。父类引用只能调用父类中存在的方法和属性不能调用子类的扩展部分。父类中的一个方法只有在父类中定义而在子类中没有重写的情况下才可以被父类类型的引用调用;对于父类中定义的方法,如果子类中重写了该方法那么父类类型的引用将会调用子类中的这个方法,这就是动态連接

}

我要回帖

更多关于 java面向对象的三大特征 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信