贝克面试问题总结——接口与抽象类
昨天参加了一下贝克找房的面试,被问到了一些基础的问题,这几天会写几篇博客来总结一下这些问题
一,接口
1.接口的定义
public interface Demo {
public static final int a=1;//定义常量
public abstract void print();//定义抽象方法
}
@接口中只能定义常量和抽象方法,前面的修饰词都可以省略,会默认为常量和抽象方法
2.接口的使用
在类定义的时候使用implements关键字实现接口
@一个类可以实现多个接口,实现了接口就必须实现接口中所有的抽象方法,可以继承到接口中所有的静态常量
@一个接口可以通过extends关键字实现多个接口!
二,抽象类
1.抽象类的定义
public abstract class Demo1 {
public int a=10;
public void test(){
System.out.println("非抽象方法");
}
public abstract void test1();//抽象方法,没有方法体
}
@抽象类必须使用public或者protected修饰(因为private不能被子类继承)省略时默认为public
@抽象类不能被实例化,需要依靠子类向上转型的方法
2.抽象类的使用
public class DemoMain extends Demo1{
public static void main(String[] args) {
DemoMain dm=new DemoMain();
int c=dm.a;
System.out.println(c);
dm.test();
dm.test1();
}
@Override
public void test1(){
System.out.println("重写了抽象类里的抽象方法!");
}
}
@抽象类使用extends关键字继承,单继承
@子类(非抽象类)必须重写抽象类的所有抽象方法,如果没有实现,就必须也定义为抽象类
三,接口和抽象类的区别
区别一:抽象类中可以存在非抽象的方法
接口中的方法被默认的变成抽象方法,只要是定义了接口,接口中的方法 就全部变成了抽象类即使你不写 abstract 它也是抽象的方法
区别二:实现抽象类的方法时, 如果方法是抽象的,子类必须重写抽象的方法. 如果方法不是抽象的, 子类可以选择继承
实现了接口 就必须实现接口中的所有方法, 因为接口中的方法默认的全部都是抽象的方法
区别三:抽象类可以有私有的成员变量和成员方法
接口中的方法全都被默认的修饰为: public abstract 类型的方法
区别四:一个类只能继承一个抽象类
一个类可以实现多个接口 ,接口可以实现多继承
区别五:抽象类实际上就是比普通方法多了一些抽象方法,可以有构造方法
接口默认属性为静态常量,方法为抽象方法,不能有构造方法。