java基础
1.抽象类和接口的区别?
类型 | Abstract Class | Interface |
---|---|---|
定义 | abstract class | interface |
继承 | 抽象类可以继承一个类和实现多个接口;子类只可以继承一个抽象类 | 接口只可以继承接口(一个或多个);子类可以实现多个接口 |
访问修饰符 | 抽象方法可以有public,protected和default这些修饰符 | 接口方法默认修饰符是public,你不可以使用其他修饰符 |
方法实现 | 可以定义构造方法,可以有抽象方法和具体方法 | 接口完全是抽象的,没有构造方法,且方法都是抽象的.不存在具体方法 |
实现方式 | 子类使用extends关键字来继承抽象类.如果子类不是抽象类的话,它需要提供抽象类中所有声明方法的实现 | 子类使用关键字implements来实现接口,它需要提供接口中所有声明的方法实现 |
作用 | 为了把相同的东西提取出来,即重用 | 为了把程序模块进行固化的契约,为了降低耦合 |
2.重载和重写的区别?
重载
方法有相同的名称,但是参数列表不相同的情形,这样的同名不同参数的方法之间,互相称之为重载方法
重写
Java的子类和父类中有两个名称,参数列表和返回值类型都相同的方法.由于他们具有相同的方法签名,所以子类中的新方法将覆盖父类中原有的方法.
重写是父类与子类之间的多态性,对父类的方法进行重新定义
两者区别
重载是让类以统一的方式处理不同类型数据的一种手段.多个同名方法同时存在,具有不同的参数个数/类型.重载是一个类中多态性的一种表现.而重写是父类与子类之间的多态性,是对父类方法的重新定义.
3.stringBuffer和stringBuilder的区别?
线程安全
类型 | Stringbuffer | StringBuilder |
---|---|---|
线程安全 | 线程安全,所有公开方法都是synchronized修饰 | 线程不安全 |
缓冲区 | 每次获取toString都会直接使用缓冲区的toStringCache(最后一次toString的缓存值)值来构造一个字符串 | 每次toString都要复制一次字符数组,再构造一个字符串 |
性能 | 由于公开方法都加synchronized,性能很差 | 不加锁,性能远大于Stringbuffer |