java基础 - 面试题

Posted ~无关风月~

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java基础 - 面试题相关的知识,希望对你有一定的参考价值。

java面向对象都有哪些特性

  • 封装:将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问。可以隐藏实现细节,使得代码模块化。

  • 继承:从已有类得到继承信息创建新类的过程。子类拥有父类的所有属性和方法(只不过父类的私有属性和方法,子类只是拥有,但是无法访问到)从而实现了代码的复用;

  • 多态

    • 方法重载,体现编译时多态,虽然方法名相同,根据不同的参数列表,调用不同的方法。
    • 方法重写,体现运行时多态,父类型引用子类型对象,同样的引用调用相同的方法会根据子类型对象的不同而表现出不同的行为。

子类对象的多态性使用的前提:1、要有类的继承 2、要有子类对父类方法的重写
程序运行分为:编译状态和运行状态
对于多态性来说,编译时,“靠左边”,将此引用变量理解为父类的类型
运行时,“看右边”,关注与真正的对象的实体,子类的对象,执行的方法时子类重写的。

方法重载

实现的是编译时的多态性,发生在一个类中,方法名同,参数列表不同,对返回类型没有要求(返回类型并不足以区分所使用的是哪个方法,java调用方法时,可以不接收返回值)。

不能通过访问权限、返回类型、抛出的异常进行重载。

方法重写

实现的是运行时的多态性,发生在父类和子类之间,

两同两小一大 原则:
方法名相同,参数列表相同
子类返回类型 小于等于 父类方法返回类型(即是其子类)(协变返回类型)
子类抛出异常 小于等于 父类方法抛出异常
子类访问权限 大于等于 父类方法访问权限

静态的方法可以被继承,但是不能重写。《Java编程思想》中这样提到“只有普通的方法调用可以是多态的”。通过实例对象访问静态方法或静态属性不是好习惯,应该通过类名访问。

关于构造函数

构造函数不能被继承,子类可以通过super()显示调用父类的构造函数

创建子类时,编译器会自动调用父类的 无参构造函数

如果父类没有定义无参构造函数,子类必须在构造函数的第一行代码使用super()显示调用

不能被override(重写),但是可以被overloading(重载)

不能用static修饰,不能有返回语句,只能用 public private protected 这三个权限修饰符。

接口

接口是对一类事物的属性和行为更高层次的抽象。

方法默认为 public abstract,必须都是抽象方法,不能有实现,没有构造方法。

属性默认为 public static final,必须是常量,且必须赋初值,只能读不能改。

java中类只支持单继承,但接口可以支持多继承。

jdk1.8 新特性,接口中方法可以用static,default 修饰,且两者修饰的方法要求有方法体,减少与抽象类的差异。

抽象类

只能作为基类,不能直接实例化。
抽象类如果含有抽象的变量或值,则他们要么是null,要么包含了对非抽象类的实例的引用。
抽象类中可以有非抽象方法。
抽象类不能是final的,(final和abstract不能同时出现)。
抽象类可以被抽象类继承,仍是抽象类。
非抽象类继承抽象类,必须覆盖所有抽象成员。

什么时候使用抽象类或接口:
如果想让一些方法有默认实现,用抽象类;
如果想实现多重继承,用接口;
如果基本功能在不断变化,用抽象类;

抽象类和接口的对比:

抽象类中不一定有抽象方法,可以有非抽象的普通方法。有抽象方法不一定是抽象类,也可能是接口。

访问控制符public,protected,private,以及默认的区别

以上是关于java基础 - 面试题的主要内容,如果未能解决你的问题,请参考以下文章

java经典面试题

java面试会问啥

Java 核心内容相关面试题

Java面试题|final在java中的作用

面试基础题

Java中最常见的十道面试题