28

编程体系结构(06):Java面向对象

 3 years ago
source link: http://mp.weixin.qq.com/s?__biz=MzU4Njg0MzYwNw%3D%3D&%3Bmid=2247484987&%3Bidx=1&%3Bsn=bbee42eb5c310c4e0903100208ea814d
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

一、基础概念

1、面向对象概念

面向对象编程的主要思想是把构成问题的各个事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙一个事物在整个解决问题的步骤中的行为。

nIVvAfv.png!mobile

2、类和对象

对象:真实存在唯一的事物;在应用程序中对象是数据和动作的结合体,不仅能够进行操作,同时还能够记录下操作结果。

类:抽象的概念,实际就是对某种类型事物的共性属性与行为的抽取;例如User[名称.年龄.性别]类用来描述用户的基础信息。

Java开发中如何理解面向对象:构建合适的对象接口API体系,创建合适的对象,解决合适的问题,例如JDK的API已经定义好的类,通过这些类创建对象直接使用;通过自定义类来创建对象使用,在MVC中模式中,不同业务功能创建不同的接口和类系统。

3、属性和方法

类中变量

位置区别:

  • 成员变量是定义在方法之外,类内;

  • 局部变量是定义在方法之内。

作用区别:

  • 成员变量的作用是用于描述一类事物的公共属性的。

  • 局部变量的作用就是提供一个变量给方法内部使用而已。

初始值区别:

  • 成员变量是有默认的初始值。

  • 局部变量是没有默认的初始值的,必须要先初始化才能使用。

生命周期:

  • 随着对象的创建而存在,随着对象的消失而消失。

  • 局部变量在调用了对应的方法时执行到了创建该变量的语句时存在,局部变量一旦出了自己的作用域那么马上从内存中消失。

类中方法

对一个类功能的具体描述,可能是类方法或者对象方法;

  • 类方法,又叫静态方法,使用类直接调用,常用工具类;

  • 对象方法,又叫实例方法,使用类对象调用,常见API方法;

构造方法

构造函数的作用是用来给对应的对象进行初始化处理,没有返回值类型的,构造函数的函数名必须要与类名一致,如果一个类没有显式的声明一个构造方法,那么java编译器会为该类添加一个无参的构造函数的,如果一个类已经显式的写上一个构造方法时,那么java编译器则不会再为该类添加一个无参的构造方法,构造函数是可以在一个类中以重载的形式存在多个。

4、接口

接口是一个特殊的类,接口的成员变量默认的修饰符为:public-static-final,接口中的方法都是抽象的方法,默认的修饰符:public-abstract,接口不能创建对象且没有构造方法的,接口是给类去实现时使用的,非抽象类实现接口,必须要把接口中所有方法全部实现。

接口的作用:程序的解耦,定义实现类的约束规范,如果需要拓展特别功能,也可以基于接口形式实现。

类与接口之间关系:多实现关系;接口与接口之间关系:多继承关系。

5、重载与重写

方法重写

父类的功能无法满足子类的需求时,可以进行方法的重写即子父类使用同名的函数,且子类重写的方法使用@Override注解,这里存在继承的关系。

  • 方法名与形参列表必须一致;

  • 子类的权限修饰符必须要大于或者等于父类的权限修饰符;

  • 子类的返回值类型必须要小于或者等于父类的返回值类型;

  • 子类抛出的异常类型要小于或者等于父类抛出的异常类型;

方法重载

在一个类中存在两个或者两个以上的同名函数,称作为方法重载,函数名要一致,形参列表不一致(形参的个数或形参的类型不一致)。

6、包与权限

权限修饰符

权限修饰符就是控制被修饰的成员的范围可见性,分为:public、private、protected、default(没有修饰)。在不同包下面只有public 与 protected 可以访问,而且protected必须是在继承关系下才能够访问。

包package

包可以理解为计算机系统中的文件夹,用来解决类名重复产生冲突的问题,包名全部小写,语句必须位于java文件中中第一个语句。

二、基本特征

封装

把类中内部的实现细节进行隐藏,只暴露对外的接口,例如实际开发场景中一般实体类的所有成员属性(成员变量)都要封装起来,可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的代码随机访问,适当的封装可以让程序代码更容易理解与维护,加强安全性。

继承

在现有父类的基础上在重新构建一个新类即子类,通过子类对象可以访问父类非私有的成员变量和成员方法,以及重写父类中的非私有成员方法,继承的作用就是能提高代码的复用性。

多态

多态指一个对象可以具备多种形态,例如:父类的引用类型变量指向了子类的对象;接口的引用类型变量指向了接口实现类的对象;这种情况是存在于继承或者实现关系中,多态情况下,子父类存在同名的成员变量时,访问的都是父类的成员,除了在同名非静态函数时才是访问子类的。

三、常用关键字

1、This关键字

this关键字代表了所属函数的调用者对象,如果存在同名成员变量与局部变量时,在方法内部默认是访问局部变量的数据,可以通过this关键字指定访问成员变量的数据,在一个构造函数中可以调用另外一个构造函数初始化对象。

2、Static关键字

static修饰成员变量:如果有数据需要被共享给所有对象使用时,那么就可以使用static修饰。

static修饰成员函数:该静态方法不依赖于任何对象就可以进行访问,非静态成员方法/变量都必须依赖具体的对象才能够被调用。

static修饰代码块:static关键字用来包装静态代码块以提升程序性能,静态代码块可以置于类中的任何地方,在类初次被加载的时候,会依次执行一次每个静态代码块。

3、Super关键字

super关键字代表了父类空间的引用,子父类存在着同名的成员时,在子类中默认是访问子类的成员,可以通过super关键字指定访问父类的成员;创建子类对象时,默认会先调用父类无参的构造方法,可以通过super关键字指定调用父类的构造方法。

4、Instanceof关键字

instanceof关键字的作用:判断一个对象是否属于指定的类别,对象与指定的类别必须要存在继承或者实现的关系。在强制类型转换之前通常会使用该关键字先判断,然后在进行转换。

5、Final关键字

final修饰类:表明该类不能被继承,final类中的成员变量可以根据需要设为final,但是要注意final类中的所有成员方法都会被隐式地指定为final方法。

final修饰方法:锁定方法防止任何继承类修改它的含义;第二个原因是效率,父类的final方法是不能被子类所覆盖的。

final修饰变量:成员变量被标识为常量,只能被赋值一次,赋值后值不再改变,当函数的参数类型声明为final时,说明该参数是只读型的。

6、Abstract关键字

abstract修饰类:该抽象类不能被实例化,抽象类与接口的不同之处,接口中不能有实例方法去实现业务逻辑,而抽象类中可以有实例方法,并实现业务逻辑,抽象类不能使用final关键字修饰,因为final修饰的类是无法被继承,而对于抽象类来说就是需要通过继承去实现抽象方法。

abstract修饰方法:抽象方法没有方法主体,与接口方法有点类似,抽象方法不能用private修饰,因为抽象方法必须被子类实现,抽象方法也不能用static修饰,抽象类.抽象方法这样的操作没有意义。

四、场景分析

1、设计模式

面向对象与设计模式是之前几年很火热的概念,面试时必问的问题,在编程中想用好设计模式,前提理解面向对象机制,都是对问题的高度向上抽象封装,向下逐层解决实现,提高代码的复用性、可读性、灵活性、可维护性强,最主要是格调高。

2、IO流体系

如果想理解面向对象和设计模式的代码,在Java中可以重点读读IO流体系的API,顶级接口,向下实现,包装类,扩展类,是真的把这两大理念用到极致了,当然IO流最为文件处理的核心,也值得读读源码。

3、MVC开发模式

在MVC的开发模式中,业务层接口,业务层实现;数据库接口,数据访问实现,也是面向对象的最基础用法接口与接口的实现类。

五、源代码地址

GitHub·地址
https://github.com/cicadasmile
GitEE·地址
https://gitee.com/cicadasmile

uaE36bV.png!mobile


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK