java基础面试 2

1.面向对象html

   面向对象是一种思想,是基于面向过程而言的,就是说面向对象是将功能等经过对象来实现,将功能封装进对象之中,让对象去实现具体的细节,咱们由之前过程的执行者,变成了指挥者。java

举例来讲:就是:好比说你要去饭店吃饭,你只须要饭店,找到饭店的服务员,跟她说你要吃什么,而后就会给你作出来让你吃,你并不须要知道这个饭是怎么错作的,你只须要面向这个服务员,安全

告诉他你要吃什么,而后他也只须要面向你吃完收到钱就好,不须要知道你怎么对这个饭进行吃。函数

特色:post

1:将复杂的事情简单化。this

2:面向对象将之前的过程当中的执行者,变成了指挥者。url

3:面向对象这种思想是符合如今人们思考习惯的一种思想。spa

二、面向对象的三大特征:封装,继承、多态.net

1.封装:只隐藏对象的属性和实现细节,仅对外提供公共访问方式code

好处:将变化隔离、便于使用、提升复用性、提升安全性

原则:将不须要对外提供的内容隐藏起来;把属性隐藏,提供公共方法对其访问

2.继承:提升代码复用性;继承是多态的前提

注:

①子类中全部的构造函数都会默认访问父类中的空参数的构造函数,默认第一行有super();若无空参数构造函数,子类中需指定;另外,子类构造函数中可本身用this指定自身的其余构造函数。

3.多态是父类或接口定义的引用变量能够指向子类或具体实现类的实例对象

好处:提升了程序的扩展性

弊端:当父类引用指向子类对象时,虽提升了扩展性,但只能访问父类中具有的方法,不可访问子类中的方法;即访问的局限性。

前提:实现或继承关系;覆写父类方法。

2.hashCode 和equals 的 区别

 hashCode()方法和equal()方法的做用其实同样,Java里都是用来对比两个对象是否相等一致,那么equal()既然已经能实现对比的功能了,为何还要hashCode()呢?

     由于重写的equal()里通常比较的比较全面比较复杂,这样效率就比较低,而利用hashCode()进行对比,则只要生成一个hash值进行比较就能够了,效率很高,那么hashCode()既然效率这么高为何还要equal()呢?

          由于hashCode()并非彻底可靠,有时候不一样的对象他们生成的hashcode也会同样(生成hash值得公式可能存在的问题),因此hashCode()只能说是大部分时候可靠,并非绝对可靠,因此咱们能够得出:

         1.equal()相等的两个对象他们的hashCode()确定相等,也就是用equal()对比是绝对可靠的。

         2.hashCode()相等的两个对象他们的equal()不必定相等,也就是hashCode()不是绝对可靠的。

全部对于须要大量而且快速的对比的话若是都用equal()去作显然效率过低,因此解决方式是,每当须要对比的时候,首先用hashCode()去对比,若是hashCode()不同,则表示这两个对象确定不相等(也就是没必要再用equal()去再对比了),若是hashCode()相同,此时再对比他们的equal(),若是equal()也相同,则表示这两个对象是真的相同了,这样既能大大提升了效率也保证了对比的绝对正确性!

 3.抽象类

  抽象类是用来捕捉子类的通用特性的 。它不能被实例化,只能被用做子类的超类。抽象类是被用来建立继承层级里子类的模板。

public abstract class GenericServlet implements Servlet, ServletConfig, Serializable {
     // abstract method
     abstract void service(ServletRequest req, ServletResponse res);
 
     void init() {
         // Its implementation
     }
     // other method related to Servlet
}

  当HttpServlet类继承GenericServlet时,它提供了service方法的实现:

public class HttpServlet extends GenericServlet {
     void service(ServletRequest req, ServletResponse res) {
         // implementation
     }
 
     protected void doGet(HttpServletRequest req, HttpServletResponse resp) {
         // Implementation
     }
 
     protected void doPost(HttpServletRequest req, HttpServletResponse resp) {
         // Implementation
     }
 
     // some other methods related to HttpServlet
}

抽象类的特色:
1,抽象方法必定在抽象类中。
2,抽象方法和抽象类都必须被abstract关键字修饰。
3,抽象类不能够用new建立对象。由于调用抽象方法没意义。
4,抽象类中的抽象方法要被使用,必须由子类复写起全部的抽象方法后,创建子类对象调用。
    若是子类只覆盖了部分抽象方法,那么该子类仍是一个抽象类。

抽象类和接口的对比  

何时使用抽象类和接口

  • 若是你拥有一些方法而且想让它们中的一些有默认实现,那么使用抽象类吧。
  • 若是你想实现多重继承,那么你必须使用接口。因为Java不支持多继承,子类不可以继承多个类,但能够实现多个接口。所以你就可使用接口来解决它。
  • 若是基本功能在不断改变,那么就须要使用抽象类。若是不断改变基本功能而且使用接口,那么就须要改变全部实现了该接口的类。

Java8中的默认方法和静态方法

接口中引入默认方法和静态方法,以此来减小抽象类和接口之间的差别。如今,咱们能够为接口提供默认实现的方法了而且不用强制子类来实现它。

相关文章
相关标签/搜索