1、Java中overload override的区别
(1)Overload是重载的意思,Override是覆盖的意思,也就是重写。
(2)重写Override表示子类中的方法可以与父类中的某个方法的名称和参数完全相同,通过子类创建的实例对象调用这个方法时,将调用子类中定义的方法,这相当于把父类中的方法给覆盖了,这也是多态性的一种表现。
(3)重载overload的特点就是与返回值无关,只看参数列表,所以重载的方法可以改变返回值类型。所以,如果两个方法的参数列表完全一样,是不能通过让它们的返回值类型不同来实现重载的。
(4)override是覆盖一个方法并且对其重写,以求达到不同的作用。对我们来说最熟悉的覆盖就是对接口方法的实现,在接口中一般只是对方法进行了声明,而我们在实现时,就需要实现接口声明的所有方法。除了这个典型的用法以外,我们在继承中也可能会在子类覆盖父类中的方法。
(5)overload对我们来说可能比较熟悉,可以翻译为重载,它是指我们可以定义一些名称相同的方法,通过定义不同类型的输入参数来区分这些方法,然后再调用时,JVM就会根据不同的参数样式,来选择合适的方法执行。
(6)方法的重写和重载是Java多态性的不同表现。重写是父类与子类之间多态性的一种表现,而重载是一个类中多态性的一种表现。
2、Java中abstract类和interface的区别
3、单例模式的几个创建方式
饿汉式、懒汉式、懒汉式+同步方法、Double-Check、Volatile+Double-Check、 Holder、方式枚举法
(1)继承Thread
①定义Thread类的子类,并重写该类的run方法,该run方法的方法体就代表了线程要完成的任务。因此把run()方法称为执行体。
②创建Thread子类的实例,即创建了线程对象。
③调用线程对象的start()方法来启动该线程。
(2)实现Runnable接口
①定义runnable接口的实现类,并重写该接口的run()方法,该run()方法的方法体同样是该线程的线程执行体。
②创建 Runnable实现类的实例,并依此实例作为Thread的target来创建Thread对象,该Thread对象才是真正的线程对象。
③调用线程对象的start()方法来启动该线程。
(3)实现Callable接口
①创建Callable接口的实现类,并实现call()方法,该call()方法将作为线程执行体,并且有返回值。
②创建Callable实现类的实例,使用FutureTask类来包装Callable对象,该FutureTask对象封装了该Callable对象的call()方法的返回值。
③使用FutureTask对象作为Thread对象的target创建并启动新线程。
④调用FutureTask对象的get()方法来获得子线程执行结束后的返回值
5、spring中用到的设计模式
6、MySQL的优化
7、栈区和堆区的区别
8、LinkList和ArrayList的区别
(1)ArrayList的底层实现就是数组,且ArrayList实现了RandomAccess,表示它能快速随机访问存储的元素,通过下标 index 访问,只是我们需要用 get() 方法的形式,数组支持随机访问,查询速度快,增删元素慢;
(2)LinkedList的底层实现是链表,LinkedList没有实现RandomAccess 接口,链表支持顺序访问,查询速度慢,增删元素快;
全部评论
(0) 回帖