题目来源:
锐明技术 Java开发 10.25 一面 二面 凉经_牛客网 (nowcoder.com)
1.面相对象三大特征
封装:将数据和方法结合在一起,保护内部状态,提供公共接口
继承:允许一个类继承另一个类的属性和方法,促进代码复用和层次化结构
多态:同一操作可以针对不同对象表现出不同的行为,提高灵活性和可扩展性
2.重载与重写的区别,接口与抽象类的区别
重载是在用一个类中,方法名相同,但参数不同(类型、数量或顺序,返回值不行)
重写是发生在子类中,子类重新定义父亲的方法,方法名、参数列表和返回类型都相同
重载发生在编译时(静态多态),而重写发生在运行时(动态多态)
接口仅定义方法签名,不包含实现,用于定义功能规范(java8以后有默认方法和静态方法)
抽象类可以包含方法的声明和具体实现,运行包含成员变量,主要用于为子类提供基本功能和共享状态,强调类的层次结构
接口支持多重继承,一个类可以实现多个接口,抽象类只支持单一继承,一个类只能继承一个抽象类。
接口只能包含public static final常量,不能有实例变量,所有字段默认为public static final
抽象类可以有各种访问修饰符的实例变量(如private,protected,public),也可以有非静态变量,以保存对象的状态。
接口所有的方法默认是public,方法不能有private或protected,可以有默认方法和静态方法(java8之后),抽象类可以定义public、protected、和private方法,即可以有抽象方法,也可以有具体方法。
接口不能有构造函数,因此不能被实例化,抽象类可以有构造函数,供子类调用以初始化状态。
两者都不能被实例化,接口必须通过实现接口的类来创建对象,抽象类必须通过子类来实现。
类实现接口时必须提供所有接口方法的具体实现,抽象类可以选择重写抽象类中的部分或全部抽象方法,也可以使用抽象类提供的具体实现。
3.String、StringBuidler、StringBuffer的区别
1.可变性
String是不可变的,创建后,内容无法更改。每次对String的操作都会产生一个新的对象
StringBuilder和StringBuffer都是可变得,无需创建新的对象
2.线程安全性
String是安全的,由于不可变,不涉及线程安全问题;StringBuilder在单线程环境中性能优越,但在多线程中可能导致数据不一致;StringBuffer他的方法被同步,确保了多线程下的安全,