最详细的 Java 基础面试题汇总( 五 )
17. 接口和抽象类的区别是什么?
- 接口的方法默认是 public , 所有方法在接口中不能有实现(Java 8 开始接口方法可以有默认实现) , 而抽象类可以有非抽象的方法 。
- 接口中除了 static、final 变量 , 不能有其他变量 , 而抽象类中则不一定 。
- 一个类可以实现多个接口 , 但只能实现一个抽象类 。 接口自己本身可以通过 extends 关键字扩展多个接口 。
- 接口方法默认修饰符是 public , 抽象方法可以有 public、protected 和 default 这些修饰符(抽象方法就是为了被重写所以不能使用 private 关键字修饰!) 。
- 从设计层面来说 , 抽象是对类的抽象 , 是一种模板设计 , 而接口是对行为的抽象 , 是一种行为的规范 。
备注:
在 JDK8 中 , 接口也可以定义静态方法 , 可以直接用接口名调用 。 实现类和实现是不可以调用的 。 如果同时实现两个接口 , 接口中定义了一样的默认方法 , 则必须重写 , 不然会报错 。
”
总结一下 jdk7~jdk9 Java 中接口概念的变化(相关阅读):
- 在 jdk 7 或更早版本中 , 接口里面只能有常量变量和抽象方法 。 这些接口方法必须由选择实现接口的类实现 。
- jdk8 的时候接口可以有默认方法和静态方法功能 。
- Jdk 9 在接口中引入了私有方法和私有静态方法 。
- 从语法形式上看:成员变量是属于类的 , 而局部变量是在方法中定义的变量或是方法的参数;成员变量可以被 public,private,static 等修饰符所修饰 , 而局部变量不能被访问控制修饰符及 static 所修饰;但是 , 成员变量和局部变量都能被 final 所修饰 。
- 从变量在内存中的存储方式来看:如果成员变量是使用static修饰的 , 那么这个成员变量是属于类的 , 如果没有使用static修饰 , 这个成员变量是属于实例的 。 而对象存在于堆内存 , 局部变量则存在于栈内存 。
- 从变量在内存中的生存时间上看:成员变量是对象的一部分 , 它随着对象的创建而存在 , 而局部变量随着方法的调用而自动消失 。
- 成员变量如果没有被赋初值:则会自动以类型的默认值而赋值(一种情况例外:被 final 修饰的成员变量也必须显式地赋值) , 而局部变量则不会自动赋值 。
20. 什么是方法的返回值?返回值在类的方法里的作用是什么?方法的返回值是指我们获取到的某个方法体中的代码执行后产生的结果!(前提是该方法可能产生结果) 。 返回值的作用:接收出结果 , 使得它可以用于其他的操作!
21. 一个类的构造方法的作用是什么? 若一个类没有声明构造方法 , 该程序能正确执行吗? 为什么?主要作用是完成对类对象的初始化工作 。 可以执行 。 因为一个类即使没有声明构造方法也会有默认的不带参数的构造方法 。
22. 构造方法有哪些特性?
- 名字与类名相同 。
- 没有返回值 , 但不能用 void 声明构造函数 。
- 生成类的对象时自动执行 , 无需调用 。
- 在外部调用静态方法时 , 可以使用"类名.方法名"的方式 , 也可以使用"对象名.方法名"的方式 。 而实例方法只有后面这种方式 。 也就是说 , 调用静态方法可以无需创建对象 。
- 静态方法在访问本类的成员时 , 只允许访问静态成员(即静态成员变量和静态方法) , 而不允许访问实例成员变量和实例方法;实例方法则无此限制 。
- 未来想进入AI领域,该学习Python还是Java大数据开发
- 学习大数据是否需要学习JavaEE
- 从事Java开发时发现基础差,是否应该选择辞职自学一段时间
- 2021年Java和Python的应用趋势会有什么变化?
- 普通大学计算机专业的本科生,该选择主攻前端还是Java
- Java语言会不会随着容器的兴起而衰落
- 大一有考研计算机专业的打算,该学习C++还是Java
- 计算机专业的同学在掌握了Java之后,还可以学习哪门后端语言
- 不实习,如何增加Java项目经验
- 大学生如何提升Java编程能力