读Java程序员面试笔记,总结Java基础知识(二)

爷,独闯天下 提交于 2020-03-09 14:55:38

Java基础知识之面向对象技术

面向对象有哪些特征

面向对象主要特征:抽象、继承、封装和多态。

  1. 抽象。抽象是忽略一个主题中与当前目标无关的那些方面,一边更充分地注意与当前目标有关的方面,抽象包括两个方面:一是过程抽象;二是数据抽象。
  2. 继承。在编程中,对象的一个新类可以从现有的类中派生,这个过程称为类继承。新类继承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类)。子类可以从他的父类那里继承方法和实例变量,并且子类可以修改或增加新的方法使之跟适合我们的需要。
  3. 封装。封装是指将客观事物抽象成类,每个类对自身的数据和方法实行保护。类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。(也就是类的权限修饰的权限,权限范围内就是可信,反之。)
  4. 多态。多态是指允许不同类的对象对同一消息做出响应。多态包括参数多态和包含多态。多态性语言具有灵活、抽象、行为共享、代码共享等优势,很好的解决了应用程序函数同名的问题。

面向对象的开发方式有什么优点

  1. 较高的开发效率。(面向对象的开发方式,对象都是从我们现实事物抽象而来,映射为开发的对象,那么我们对开发的对象的各种特征,以及对象的功能都是直观明了的。)
  2. 保证软件的鲁棒性。(面向对象的开发中,重点是对象,还有对象延展出来的类,方法都在开发中经常使用,自然而然对软件的鲁棒性起到了很好的促进作用)
  3. 保证软件的高可维护性。(即是我们在面向对象的开发方式,使得代码的可读性非常好,代码中结构清晰明了,在变更也就是维护的时候,只需要修改部分的模块就可以实现。)

什么是继承

继承:子类可以使用父类中的一些成员变量与方法,从而能够提高代码的复用性,提高开发效率。在Java语言中,被继承的类叫基类(superclass)或父类,继承基类或父类的类叫派生类或子类(subclass)。继承是通过extends关键字来实现的,使用格式为:class子类名extends父类名。
    继承主要的几个特性:

  1. Java语言不支持多重继承,即子类至多只能有一个父类,但是可以通过实现多个接口来达到多重继承的目的。
  2. 当子类中定义的成员变量和父类中国定义的成员变量同名时,子类中的成员变量会覆盖父类中的成员变量,而不会继承。
  3. 同上,当子类中的方法与父类中的方法有相同的函数名称(相同的函数名称:相同的方法名,相同的参数个数与类型)时,子类中将会覆盖父类的方法,不会继承。

组合和继承的区别

组合是指在新类里创建原有类的对象,重复利用已有类的功能。
继承是设计人员根据其他类的实现来定义一个类的实现。
区别:
组合和继承都允许在新的类中设置对象,只是组合是显示的,而继承是隐式的.
组合和继承都存在着对应关系:组合中的整体类和继承中的子类对应,组合中的局部类和继承中的父类对应。

多态实现的机制是什么

    他表示当同一个操作作用在不同对象时,会有不同的语义,从而会产生不同的结果。
多态主要有以下两种表现方式:

  1. 方法的重载(overload)重载是指同一个类中有很多个同名的方法,但是这些方法有着不同的参数,因此在编译时就可以确定到底是调用哪个方法,他是一种编译时的多态。重载可以被看作一个类中方法多态性。
  2. 方法的覆盖(override)。子类可以覆盖父类的方法,因此同样的方法会在父类与子类中有着不同的表现形式。由于只有在运行时才能确定调用哪个方法,因此通过方法覆盖实现的多态也可以被称作运行时多态。
    扩展:常见笔试题
    Java中提供了哪两种用于多态的机制?
    答:编译时多态和运行时多态。编译时多态是通过方法的重载实现的,运行时多态是通过方法的覆盖(子类覆盖父类方法)实现的。

重载和覆盖有什么区别

    重载和覆盖是Java多态性的不同表现方式,重载是在一个类中多态性的一种表现,是指在一个类中定义了多个同名的方法,他们或有不同的参数个数或有不同的参数类型。在使用重载时需要注意的点:

1、 重载是通过不同的方法参数来区分的,例如不同的参数个数、不同的参数类型或不同的参数顺序。
2、不能通过方法的访问权限、返回值类型和抛出的异常类型来进行重载。
3、 对于继承来说,如果积累方法的访问权限为private,那么就不能在派生类对其重载;如果派生类也定义了一个同名的函数,这只是一个新的方法,不会达到重载的效果。
    覆盖是指派生类函数覆盖基类函数。覆盖一个方法对其重写,以达到不同的作用。在使用覆盖要注意一下几点:
1、派生类中的覆盖方法必须要和基类中被覆盖的方法有相同的函数名和参数。
2、派生类中的覆盖方法的返回值必须和基类中被覆盖白方法的返回值相同。
3 、派生类中的覆盖方法所抛出的异类必须和基类(或其子类)中被覆盖的方法所抛出的异常一致。
4、基类中被覆盖的方法不能为private,否则其子类只是定义了与了一个方法,并没有对其覆盖

    重载与覆盖的区别主要有以下几个方面:

  1. 覆盖是子类和父类之间的关系,是垂直关系;重载是同一个类中方法之间的关系,是水平关系。
  2. 覆盖智能由一个方法或只能由一对方法产生关系;重载是多个方法之间的关系。
  3. 覆盖关系中,调用方法体是根据对象的类型(对象对应存储空间类型)来决定;而重载关系是根据调用时的实参表与形参表来选择方法体的。

抽象类(abstract class)与接口(interface)有什么异同

    如果一类中包含抽象方法,那么这个类就是抽象类。在Java语言中,可以通过把类或者类中的某些方法声明为abstract(abstract只能用来修饰类或者方法,不能用来修饰属性)来表示一个类是抽象类。接口就是一个方法的集合,接口中的所有方法都没有方法体,在Java语言中,接口是通过关键字interface来实现的。
接口与抽象类的相同点:
1.都不能被实例化。
2.接口的实现类或抽象类的子类都只有实现了接口或抽象类中的方法后才能被实例化。
接口与抽象类的不同的:
1.Java8之前,接口只有定义,其方法不能在接口中实现,只有实现接口的类才可以实现接口中定义的方法,而抽象类可以有定义与实现,即其方法可以在抽象类中被实现。
2.接口需要实现(用implements),但抽象类只能被继承(用extends)。一个类可以实现多个接口,但一个类只能继承一个抽象类,因此使用接口可以间接地达到多重继承地目的。
3.接口强调特定功能地实现,其设计理念是“has-a”地关系;而抽象类强调所属关系,其设计理念是“is-a”关系。
4.接口被运用于实现比较常见的功能,便于日后维护或者添加删除方法;而抽象类更倾向于充当公共类的角色,不适用于日后重新对立面的代码进行修改。
    简单点说,接口是以重特殊形式的抽象类,使用接口完全有可能实现与抽象类相同的操作,但一般而言,抽象类多用于在同类事物中有无法集体描述的方法的场景,所以当子类和父类之间存在逻辑上的层次结构时,推荐使用抽象类;而接口多用于不同类之间,定义不同类之间的通信规则,所以当希望支持差别比较大的两个或者更多对象之间的特定交互行为时,应该使用接口。
    此外,接口可以继承接口,抽象类可以实现接口,抽象类也可以继承具体类。抽象类也可以有静态的main方法。

如何获取父类名称

Java提供了获取类名的方法:getClass().getName()。

this与super的区别

在Java语言中,this用来指当前实例对象,作用是用来区分对象的成员变量与方法的形参(当一个方法的形参与成员变量的名字相同时,就会覆盖成员变量)。
super是可以用来访问父类的方法或成员变量。

本章主要用来本人巩固Java面试基础,基本属于书本内容,对其中理解也是比较少的,毕竟个人能力有限。希望通过这种总结能够加深对Java基础的映像。
    

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!