转载:深入解析java面向对象

    原文地址:https://www.cnblogs.com/xugf/p/8475931.html

   java是面向对象的高级语言,类和对象是java对象的核心构成,围绕java类和java对象,主要有3大基本特性:封装、继承、多态,封装是java类的编写规范,继承是类和类之间联系的一种形式,而多态未系统组件和模块之间提供了解决方案。

本文主要围绕3大特性介绍java面向对象、组建解耦的核心思想。

 

1、面对对象思想

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

面向对象的程序核心是由对象组成的,每个对象包含对外公开的特定功能和隐藏的实现部分,程序中的很多对象来自jdk库,而更多是由程序员自定义的。

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

面向对象由一下特点:

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

(2)、面向对象能将复杂的业务逻辑简单化,增加代码复用性。

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

 面向对象的语言有 c++ 、java、c#等

 

2、类和对象的关系

类:对某项事物的普遍一致性特征、功能的抽象、描述和封装,是构成对象的模板,用java编写的代码都会在类的内部。类之间的关系有依赖、聚合、继承等关系

对象:使用new关键字或反射技术创建的某个类的实例。用一个类的所有对象,都具有相似的数据和行为,但每个对象都保存自己独特的状态,对象状态会随着程序的运行发生改变,状态的变化必须调用相应的方法来改变,这就是封装的思想。

 

3、封装思想

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

具体的实现方式就是:

使用private修饰关键字把成员变量设置为私有,防止外部程序直接随意调用和修改成员变量,然后提供公共的set和get方法设置和获取成员变量的值。也可以把只在本类内部使用的方法使用private,这就是封装的思想,是面向对象最基本的开发规范之一。

说下java的访问修饰关键字,java有4中访问修饰关键字:public、private、protectd和默认权限四种。

public :具有最大的访问权限,可以访问任何一个在classpath下的类。

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

default:本包的类可以访问,

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

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

通过反射机制,还是可以访问类的私有成员变量的。

在实际开发中,这样的封装方式已经成为java bean代码编写的规范。主流的反射框架也是采用set和get为对象赋值取值,而不是直接操作对象的值。

4继承和类的实例化过程

  (1)在多个不同类中抽取共性的数据和逻辑,对这些共性的内容进行封装成一个新的类即父类(也叫超类、父类),让之前的           类继承这个类,子类中就不必重复定义共性的内容。

   (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类型,不需要修改依赖组件的代码

   原文地址:https://www.cnblogs.com/xugf/p/8475931.html

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值