重刷面试题要点总结---day01
重刷一遍面试题,记录学习过程中遇到的问题。
1. java中进行取整函数的总结:
java中常用的取整函数就是Math类下的ceil、floor、round三种取整方式。
ceil:向上取整,要点就是越取越大,比如:
Math.ceil(11.1) = 12.0
Math.ceil(12.7) = 13.0
Math.ceil(-11.5) = -11.0
Math.ceil(-7.7) = -7.0
floor:向下取整,要点就是越取越小,比如:
Math.floor(11.1) = 11.0
Math.floor(12.7) = 12.0
Math.floor(-11.5) = -12.0
Math.floor(-7.7) = -8.0
round:四舍五入,要点就是去掉符号,然后将数字四舍五入后再加上符号,但是有例外:当数字为负数,且小数位最后一位为5时,直接去掉最后一位小数位,剩余部分继续按照前面的规则计算即可,比如:
Math.round(11.1) = 11.0
Math.round(12.7) = 13.0
Math.round(-11.5) = -11.0
Math.round(-7.7) = -8.0
Math.round(-11.75) -> Math.round(-11.7) -> -12 .0
2.抽象类和接口的区别
(1)构造方法上:抽象类可以有构造方法,接口不能有构造方法
(2)普通成员变量上:抽象类可以有普通成员变量,也可以有静态成员变量,且访问修饰符随意,接口的成员变量只能被public static final修饰
为什么接口的成员变量只能被static final修饰
i.为什么接口中的成员变量只能被static修饰
接口存在的意义就是定义一种共有的规范,是一种高度抽象化的模板,接口中的东西就应该是所有实现类的共有特性,所以接口中的成员变量默认是static修饰的,所有实现类共用一个相同的变量,而且如果可以使非static的话,一个类要是实现了多个接口,并且这多个接口中有一个不被static修饰并且连变量名相同的成员,你在实现类中如何区分接口中这些同名的变量名?
ii.为什么接口中的成员变量只能被final修饰
如果不被final修饰,则在实现类中可以随意更改变量的值,那就违反了接口“共有的规范”这一特性了,接口是一种更高层面的抽象,是一种规范、功能定义的声明,所有可变的东西都应该归属到实现类中,这样接口才能起到标准化、规范化的作用。所以接口中的属性必然是final的。
iii.接口是一种更高层面的抽象,是一种规范、功能定义的声明,所有可变的东西都应该归属到实现类中,这样接口才能起到标准化、规范化的作用。所以接口中的属性必然是final的。
(3)静态成员变量上:抽象类可以有静态成员变量,且访问修饰符随意,接口只能有静态成员变量,且只能是public的,并默认被public static final修饰
(4)普通方法上:抽象类中可以有任意访问修饰符修饰的普通方法,接口中所有方法都是抽象的(不过接口可以有被public default修饰的默认方法),并默认被public abstract修饰
(5)静态方法上:抽象类中可以包含静态方法,接口中不能包含静态方法
为什么接口中不能包含静态方法呢?
因为静态方法不能被重写,既然接口中的方法都是abstract的,即没有方法体的,并且如果接口中的方法还能是静态的,即不能被重写的,既没有方法体还不能被重写,那这个方法存在的意义是什么?接口重要的作用就是实现类可以对接口中的功能就行扩展,如果接口中的方法是静态的这个方法就没有意义了。
(6)一个类可以实现多个接口,但只能继承一个类
(7)接口的关键字是interface,抽象类关键字是abstract