接口、抽象类、普通类
1、常见面试题
1.1 接口的修饰符可以为:
A.private B.protected C.final D.abstract
接口的方法默认是public abstract;
接口中不可以定义变量即只能定义常量(加上final修饰就会变成常量)。所以接口的属性默认是public static final 常量,且必须赋初值
1.2 public interface IService {String NAME=“default”;}默认类型等价表示是哪一项:
A.public String NAME=“default”;
B.public static String NAME=“default”;
C.public static final String NAME="default";
D.private String NAME=“default”;
接口当中的成员变量默认是:public static final
接口当中的成员方法默认是:public abstract
一般定义的时候不加,也是默认为以上的形式存在的
1.3 一个类可以同时被abstract和final修饰吗?
不可以的。final的类不能被重写和继承,
而abstract的类是抽象类,本身没有实现,只能通过子类来实现,也就是说必须被继承。
抽象类中不能有static,final,private修饰的方法
被static修饰的方法属于类,是类自己的东西,不是给子类来继承的
private的访问权限是本类中,子类继承父类后,是无法重写private修饰的方法的
2、抽象类和普通类的区别
1、实例化:普通类可以直接实例化,而抽象类不能直接实例化。
2、方法:抽象类中既包含抽象方法又可以包含具体的方法,而普通类只能包含普通方法
3、实现:普通类实现接口需要重写接口中的方法,而抽象类可以实现接口方法也可以不实现。也就是说:抽象类A继承抽象类B,此时抽象类A,可以不重写抽象类B中的方法。如果是普通类继承,就得重写
定义一个接口如下:
抽象类重写接口方法与否都不影响:
普通类不重写就报错:
3、抽象类和接口的区别
1、定义:定义的关键字不同,抽象类是 abstract,而接口是 interface。
2、方法:抽象类可以包含抽象方法和具体方法,而接口只能包含方法声明(抽象方法)。
3、方法访问控制符:抽象类中的抽象方法不能被 private 修饰;而接口有限制,接口默认的是 public abstract控制符。
4、实现:一个类只能继承一个抽象类,但可以实现多个接口。
5、变量:抽象类可以包含实例变量和静态变量,而接口只能包含常量。
6、构造函数:抽象类可以有构造函数,而接口不能有构造函数。
7、类的访问控制符:都只能是public。
4、抽象类总结规定
-
抽象类不能被实例化(初学者很容易犯的错),如果被实例化,就会报错,编译无法通过。只有抽象类的非抽象子类可以创建对象。
-
抽象类中不一定包含抽象方法,但是有抽象方法的类必定是抽象类。
-
抽象类中的抽象方法只是声明,不包含方法体,就是不给出方法的具体实现也就是方法的具体功能。
-
构造方法,类方法(用 static 修饰的方法)不能声明为抽象方法。
-
抽象类的子类必须给出抽象类中的抽象方法的具体实现,除非该子类也是抽象类。