Java菜鸟面试突破系列之Java基础方面(四)
1、首先要说的第一个问题自然是HashMap和List、Vector相关的,这个问题可以参看我之前整理的两篇博文:
Java面试系列之HashMap大扫盲汇总
Java菜鸟面试突破系列之Java基础方面(一)第10题
所以这里就具体不赘述了。。。
2、今天要说的重点在于java的三个(四个)特点:继承、封装、抽象、多态,以这四个特征为始,着重讲述多态!
继承:
允许存在父子类的关系,一个子类有且只有一个直接的父类(Java中的继承是类之间的单继承,不支持多继承)
继承的目的:实现代码的复用.理顺类型对象之间的结构关系。构建一个父类的时候,要求他的子类与父类必须有理论上的确实的继承关系
代码复用的方法: 继承复用:完全的将父类非私有部分作为子类的内容,若需变化,子类只要重写父类的同名方法即可。组合复用:选取某个类型中的一个对象的方法实现作为该类的方法实现过程,这两个类也称为理论父类和理论子类。程序中是不会出现extends关键字对两个类关系的描述的。
封装:
首先,属性可用来描述同一类事物的特征,方法可描述一类事物可做的操作。封装就是把属于同一类事物的共性(包括属性与方法)归到一个类中,以方便使用。
概念:封装也称为信息隐藏,是指利用抽象数据类型将数据和基于数据的操作封装在一起,使其构成一个不可分割的独立实体,数据被保护在抽象数据类型的内部, 尽可能地隐藏内部的细节,只保留一些对外接口使之与外部发生联系。系统的其他部分只有通过包裹在数据外面的被授权的操作来与这个抽象数据类型交流与交互。 也就是说,用户无需知道对象内部方法的实现细节,但可以根据对象提供的外部接口(对象名和参数)访问该对象。
好处:(1)实现了专业的分工。 将能实现某一特定功能的代码封装成一个独立的实体后,各程序员可以在需要的时候调用,从而实现了专业的分工。(2)隐藏信息,实现细节。通过控制访问权限 可以将可以将不想让客户端程序员看到的信息隐藏起来,如某客户的银行的密码需要保密,只能对该客户开发权限。
Java常见的访问控制修饰符:
Public :到处都可以访问,不受包和父子类关系的限制
默认: 只在同包内可以访问,不受父子类关系限制
Protected: 不同包的子类和同包的类中访问,这是一种继承访问。
Private:只有自己类内部能访问,其他部分无论包内外,父子类都不能访问
Final:修饰属性:常量,值不能被修改,要么在声明时候赋值,要么在构造方法中赋值,两次机会只能选取一次。修饰方法 :*final方法子类不能将其重写;修饰类:*该类不能有子类,即不能被继承!
Static:修饰属性:静态属性是类所有实例共有,可以用”类名.属性”的方式访问,对于数值型变量,系统会给定初始值,不强制要求赋初始值。方法:可以用”类名.属性”的方式访问,方法也为类的所有实例所共有。代码块 : 加载的优先级最高,甚至比主方法的加载还要早。
PS:对于由final static共同修饰的变量,赋值的机会有两个,一是在声明的时候,二是在静态代码块中,两次机会有且只能有一次被选择!
抽象:
概念:处理各种问题的第一步,把具体的问题与解决问题的方法结合起来,这就是抽象的过程.
关于抽象主要需要掌握抽象与接口的一些区别,这些问题可以参看Java菜鸟面试突破系列之Java基础方面(三)这篇博文,这里我就抽象和接口方面的面试相关问题都做了大致的描述,此处不多说了。。。
多态:
多态是以封装和继承为基础的。
多态就是在抽象的层面上实施一个统一的行为,到个体(具体)的层面上时,这个统一的行为会因为个体(具体)的形态特征而实施自己的特征行为。(针对一个抽象的事,对于内部个体又能找到其自身的行为去执行。)
概念:相同的事物,调用其相同的方法,参数也相同时,但表现的行为却不同。
理解:子类以父类的身份出现,但做事情时还是以自己的方法实现。子类以父类的身份出现需要向上转型(upcast),其中向上转型是由JVM自动实现的, 是安全的,但向下转型(downcast)是不安全的,需要强制转换。子类以父类的身份出现时自己特有的属性和方法将不能使用。
这里主要还会涉及几个面试中常问的问题:
多态经典面试题:Java多态的表现?(华为)
其实问的是Overload和Override的区别,主要知道重载和重写是多态的两种不同形式就好了。Overloaded的方法是否可以改变返回值的类型? 方法的重写Overriding和重载Overloading是Java多态性的不同表现。重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。如果在子类中
定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被“屏蔽”了。如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。Overloaded的方法是可以改变返回值的类型。
这里先就写这些,后期有空闲再来补充。。。