Java开发面试一

问题一:面向对象的三个特征,以及各自的优点和缺点

1、封装

  • 封装的意义是:将一些类的内部细节,属性进行隐藏,然后通过接口对外开放。这样就看不到内部是如何复杂实现的,只需要通过调接口就行。通常不允许外界不能对成员的属性进行直接的修改。
  • 优点:
  • 提升程序的解耦合程度,进而增强了程序的可扩展性。
  • 封装之后就形成了一个“对象”,成为了一个“独立体”。
  • 对于事物本身提高了安全性。
  • 缺点:
  • 设计比较复杂。
  • 容易过度的去设计。

备注:如何实现属性的隐藏

  • 再属性名前面加**_**前缀,就会实现一个对外隐藏属性的效果。

2、继承

  • **继承的意义:**继承可以使得子类具有父类的属性和方法,并且子类还能再父类的基础上进行扩展。
  • 优点:
  • 提高了代码的复用性,多个类具有相同的属性时,只需要再父类上进行声明,之后让子类继承
  • 提高了代码的维护性,当需要修改的时候,只需要修改一处即可。
  • 缺点:
  • 继承使得子类与父类产生了关系,类的耦合性增强了,当父类需要修改的时候,子类也需要相应的修改,削弱了子类的独立性。

备注一:重写

  • 只有有继承才会有重写,当父类的某些方法不能满足开发者的时候,就需要重写方法。
  • 重写需要注意的:
  • 方法名必须和父类相同
  • 参数列表必须和父类相同
  • 被final修饰的最终方法不能被重写
    1、final修饰类:该类不能被继承(不能有子类,但是可以有父类)
    2、final修饰成员方法:该方法不能被重写
    3、final修饰成员变量:标识该变量时一个常量,不能被重新赋值。
    4、final修饰基本数据类型,其值不能改变。
    5、final修饰引用数据类型,其引用数据类型的地址不能改变,但是地址的内容可以改变。
  • 子类的权限必须比父类大
  • 静态方法不能被重写(static)

3、多态

  • 多态的意义: 同一个对象,在程序的不同时刻的多种运行状态,父类或者接口的引用指向子类对象。通俗的解释:同一种事物的多种形态。(同一个接口,使用不同的实例而执行不同的操作)
  • 多态的前提条件:
  • 必须有继承或者实现关系
  • 必须有方法的重写
  • 父类(接口)的引用指向子类(实现)的对象
  • 优点:
  • 提高了代码的维护性(由继承保证)
  • 提高了代码的扩展性(多态保证)
  • 缺点:
  • 不转型(向下转型)的前提下,只能访问父类中已有的功能,不能访问子类特有的功能。
    备注:转型问题
  • 向上转型:子类引用的对象转换为父类引用的对象
  • 向下转型:把父类引用对象强制转换成子类引用对象。

问题二:Get请求和Post请求的区别

1、Get请求

  • Get查询字符串(键值对)被附加在URL地址后面一起发送给服务器
  • Get请求能够被缓存
  • Get请求会保存在浏览器的浏览记录中
  • 以Get请求的URL地址能够保存为浏览器书签

2、Post请求

  • Post查询字符串时被放在Post信息放置在HTML HEADER和HTTP请求一起发送到服务器
  • Post请求不能被缓存下来
  • Post请求会保存在浏览器的浏览记录中
  • 以Post请求的URL地址能够保存为浏览器书签

3、Get和Post请求区别

  • Get用来获取数据,Post用来提交数据
  • Post比Get请求更加安全
  • 在发送数据时,Post发送的数据量更大,Get请求受到URL限制
  • Post在发送数据时比Get慢(Post以报文形式发送,3次握手)

问题三:重写和重载的区别

1、重写

  • 子类把父类本身有的方法重写一遍,子类继承父类原有的方法,并在此基础上进行扩展。**所以方法名,参数列表,返回类型相同。**注意:子类方法的访问修饰权限不能少于父类(public>protected>default>private)
  • 重写方法一定不能抛出新的检查异常或者比被重写方法申明更加宽泛的检查型异常

2、重载

  • 在一个类中,同名的方法如果有不同的参数列表(参数类型不同、参数个数不同甚至是参数顺序不同)则视为重载。同时,重载对返回类型没有要求,可以相同也可以不同,但不能通过返回类型是否相同来判断重载
  • 重载的时候,返回值类型可以相同也可以不相同。无法以返回型别作为重载函数的区分标准。

3、回答技巧

  • 方法的重载和重写都是实现多态的方式,区别在于前者实现的是编译时的多态性,而后者实现的是运行时的多态性。重载发生在一个类中,同名的方法如果有不同的参数列表(参数类型不同、参数个数不同或者二者都不同)则视为重载;重写发生在子类与父类之间,重写要求子类被重写方法与父类被重写方法有相同的参数列表,有兼容的返回类型,比父类被重写方法更好访问,不能比父类被重写方法声明更多的异常(里氏代换原则)。重载对返回类型没有特殊的要求,不能根据返回类型进行区分。