面试题:抽象类和接口之间的区别
1)成员的区别:
抽象类中
成员变量:既可以是常量,也可以是变量
成员方法:既可以是抽象方法(abstract不能省略),也可以是非抽象方法
构造方法:既存在无参构造方法,也可以存在有参构造方法(目的:为了给当前类进行数据初始化)
abstract class Animal{
private String name ;
private int age ;
private String color ;
public Animal(){}
public Animal(String name,int age,String color){
this.name = name ;
this.age = age ;
this.color = color ;
}
public abstract void eat() ;
}
class Cat extends Animal{
public Cat(){
}
public Cat(String name,int age,String color){
super(name,age,color) ;
}
public void eat(){
//...
}
}
Animal a = new Cat() ; //抽象类多态
接口中 成员变量:只能是常量,存在默认的 修饰符 public static final (可以省略不写) 成员方法:只能是抽象方法:存在默认修饰符 public abstract(省略不写) 构造方法:没有构造方法,接口中所有的方法---都认为是没有方法体 2)关系的区别 三点 类与接口的关系 类与类的关系 接口与接口的关系 类与类之间的关系: extends 继承关系 只支持单继承,不支持多继承,但是可以多层继承 类和接口的关系: implements关系:实现关系 一个类继承另一个类的同时,可以实现多个接口,中间逗号给隔开 接口与接口之间: extends:继承关系 不仅支持单继承,也可以多继承,中间使用逗号隔开 3)设计理念的区别 抽象类--->不能实例化---通过具体的子类实例化--->存在继承关系,体现的是一种 "is a"的关系 接口---->不能实例化--->通过具体的子实现类实例化---->谁如果实现了接口,就具备额外的功能, 体现的是一种"like a"的关系