1.抽象类
抽象类是用abstract修饰的类,抽象类的特点:
1)抽象类中不一定有抽象方法,但是有抽象方法的类一定是抽象类
2)抽象类不能实例化
抽象类的子类:
要么是抽象类:如果是抽象类的子类那么这个子类不能直接实例化,没有意义,但是在java 的设计理念中肯定存在一个具体的子类
要么是具体类:可以通过子类进行对象的创建,利用多态的方式
3)抽象类强制子类重写父类中的抽象方法,否则编译不通过
我个人对于抽象类的理解就是将这个类看做是一个含糊的表达方法,因为现实生活中我们无法判断例如"衣服","动物"这些类型的物体,我们无法说出这个类型具体包含哪些特征,只知道它们的共性有哪些,比如说衣服共性中有遮羞,御寒,但是还有很多其他的功能我们没办法通过具体类表达出来,比如礼服和运动衣是两个类型的衣服,除了共同的功能遮羞以外还有很多不同的地方,比如穿着舒适度,场合都不相同.所以我们只能通过一个抽象的概念来概括这个衣服这类型的物品,具体有哪些特征我们可以通过子类来单独声明.
2.接口
接口是用interface修饰的类,接口的特点:
1)成员变量只能是常量,存在默认的修饰符public static final
2)接口中的方法只能是抽象方法,存在默认修饰符public abstract
3)没有构造方法,只能通过子实现来实例化
我对于接口的概念和抽象差不多,但是接口比抽象类更加的抽象,抽象类中还可以有构造方法和各种修饰符修饰的成员变量,而他只能存在抽象方法.
3抽象类和接口的区别
1)关系区别:
类与类:继承关系,只支持单继承,可以多层继承不能多继承
类与接口:实现关系,一个类可以实现多个接口
接口与接口:继承关系,支持单继承,也可以多继承
2)设计区别:
抽象类—体现了"is a"的关系
接口—体现了"like a"的关系
4.String,StringBuffer,StringBuilder的区别
String字符串是常量,一旦被赋值,其值不能被改变
StringBuffer和StringBuilder都作为字符串缓冲区,都是可变的字符序列
StringBuffer的执行效率略低但是线程安全
StringBuilder的执行效率最高但是线程不安全
在单线程中,使用StringBuilder代替StringBuffer