时间:2018年10月29日
@面试题
1.抽象类和接口的区别
-
主要区别:
1.抽象类有构造方法,接口没有构造方法 2.抽象类中可以有代码块,接口中不能出现代码块 3.抽象类只能继承一个直接父类,接口可以继承多个父接口 4.抽象类的子类通过extends关键字继承抽象类后可以实现抽象类的方法 接口的实现类通过implements关键字实现接口并实现其中的抽象方法
-
相同点:
抽象类和接口都可以有抽象方法,抽象类和借口都不能被实例化, 抽象类通过extends来继承抽象类接口通过extend来继承接口。
2.抽象类有构造方法,为什么不能被实例化
- 子类通过super()调用父类的构造
3.tomact的端口号在哪里改?
线程相关:
线程的两种实现方式有什么不同
1.继承thread类:子类重写了父类的run方法,当调用 start 方法时,直接找子类的 run 方法。
2.实现Runnable接口:Thread的构造函数中传入了Runnable引用,成员变量记住它,start()调用Thread中的run()方法时,判断成员变量Runnable的引用是否为空,不为空则在Thread的run()方法中调用Runnable的run()方法。编译看Runnable的run(),运行看子类run()方法。
3.继承Thread:(首选这个,如果有了父类就用接口) 好处是:直接使用Thread类中的方法,代码简单 弊端是:如果已经有了父类,就不能使用这种方法
4.实现Runnable接口:
好处是:即使自己定义的线程类有了父类也没有关系,因为有了父类也可以实现接口,而接口是可以多实现的
弊端是:不能直接使用Thread类中的方法,需要先获取到线程对象后,才能得到Thread的方法,代码复杂