2019-Java面试总结(基础篇)

1.什么是面向对象?

  1. 把数据及对数据的操作方法放在一起,作为一个相互依存的整体——对象。对同类对象抽象出其共性,形成类。类中的大多数数据,只能用本类的方法进行处理。类通过一个简单的外部接口与外界发生关系,对象与对象之间通过消息进行通信。程序流程由用户在使用中决定。(这里简单的说下,具体太复杂)

    简写:面向对象是程序的一种面向方式,它的程序比较集中,它有两个成员,一个是属性,一个是方法,可以更集中的来写程序

  2. 主要特征:封装 ,继承 ,多态

2.什么是多态?实现多态的机制是什么?

  • 接口的多种不同的实现方式即为多态。
  • 多态性是允许你将父对象设置成为一个或更多的他的子对象相等的技术。
  • 我们在程序中定义的引用变量所指向的具体类型和通过该引用变量的方法调用在编程的时候并不确定,当处于运行期间才确定。就是这个引用变量究竟指向哪一个实例对象,在编译期间是不确定的,只有运行期才能确定,这样不用修改源码就可以把变量绑定到不同的类实例上,让程序拥有了多个运行状态,这就是多态。
  • 通俗一点:
    允许将子类类型的指针赋值给父类类型的指针,把不同的子类对象都当作父类来看。比如你家有亲属结婚了,让你们家派个人来参加婚礼,邀请函写的是让你爸来,但是实际上你去了,或者你妹妹去了,这都是可以的,因为你们代表的是你爸,但是在你们去之前他们也不知道谁会去,只知道是你们家的人。可能是你爸爸,可能是你们家的其他人代表你爸参加。这就是多态。
    多态又分为 编译时多态和运行时多态
    编译时多态:比如重载(不同的参数列表)
    运行时多态:比如重写(覆盖)

多态的实现机制:
我们将引入Java静态分派和动态分派这个概念。

静态分派:所有依赖静态类型来定位方法执行版本的分派动作。静态分派发生在编译阶段,因此确定静态分派的动作实际上不是由虚拟机来执行的,而是由编译器来完成。(编译时多态)
动态分派:在运行期根据实际类型确定方法执行版本的分派动作。(运行时多态)

3.接口(Interface)与抽象类(Abstract Class)的区别?

异:

  1. 接口只有方法定义,没有具体的实现,实现接口的类要实现接口的所有方法;抽象类的方法可以有定义与实现;
  2. 接口与类是实现关系,并且类可以多实现;抽象类与类是继承关系,只能被一个类继承。
  3. 接口中成员全为public 抽象类中可以有抽象方法,也可以没有,抽象方法需加abstract
  4. 接口中无静态方法,抽象类中可以有。
  5. 接口中不能定义构造器,抽象类中可以。
    同:
  6. 都不能被实例化
  7. 可以将抽象类和接口类型作为引用类型
  8. 一个类如果实现接口或继承抽象类,必须实现全部抽象方法,否则仍然是个抽象类。

4.重写(Override)与重载(Overload)的区别?

一、重写(override)

override是重写(覆盖)了一个方法,以实现不同的功能。一般是用于子类在继承父类时,重写(重新实现)父类中的方法。
重写(覆盖)的规则:
1、重写方法的参数列表必须完全与被重写的方法的相同,否则不能称其为重写而是重载.
2、重写方法的访问修饰符一定要大于被重写方法的访问修饰符(public>protected>default>private)。
3、重写的方法的返回值必须和被重写的方法的返回一致;
4、重写的方法所抛出的异常必须和被重写方法的所抛出的异常一致,或者是其子类;
5、被重写的方法不能为private,否则在其子类中只是新定义了一个方法,并没有对其进行重写。
6、静态方法不能被重写为非静态的方法(会编译出错)。
7、子类不能继承父类的静态方法。(父类的静态方法可以被子类继承,但是不能重写)
二、overload是重载,一般是用于在一个类内实现若干重载的方法,这些方法的名称相同而参数形式不同。重载的规则:

1、在使用重载时只能通过相同的方法名、不同的参数形式实现。不同的参数类型可以是不同的参数类型,不同的参数个数,不同的参数顺序(参数类型必须不一样);
2、不能通过访问权限、返回类型、抛出的异常进行重载;
3、方法的异常类型和数目不会对重载造成影响;
多态的概念比较复杂,有多种意义的多态,一个有趣但不严谨的说法是:继承是子类使用父类的方法,而多态则是父类使用子类的方法。
一般,我们使用多态是为了避免在父类里大量重载引起代码臃肿且难于维护。

摘自:

  • https://www.cnblogs.com/zhan-v587/p/6554976.html
  • https://www.jianshu.com/p/68ddb5484ca2
  • https://blog.csdn.net/sunxianghuang/article/details/52280002
  • https://blog.csdn.net/weizhengzhou520/article/details/82386822
  • https://www.cnblogs.com/yaobolove/p/4474818.html

你可能感兴趣的:(2019Java面试,Java多线程,Java基础,JVM原理)