1.面向对象的特征有哪些方面?
封装(将对象相关的信息和行为状态捆绑成一个单元,即将对象封装为一个具体的类。封装隐藏了对象的具体实现,当要操纵对象时,只需调用其中的方法,而不用管方法的具体实现)
继承(便于对已有函数功能的调用与扩展)
多态(将子对象赋值给父对象,用父对象调用某一方法,实则调用的是子类中重写的该方法。作用:把不同的子类对象都 当作父类来看,可以屏蔽不同子类对象之间的差异---用赋值后的不同父对象调用同一方法,实现的却是不同 子类中该方法的功能。可以写出通用的代码,做出通用的编程,以适应需求 的不断变化。)
2.访问修饰符public,private,protected,以及不写(默认)时的区别?
public(类、方法、数据域):表示可以被任何其他的类访问。
protected(方法、数据域):允许任何包中的子类和同一包中的类访问。默认(类、方法、数据域):可以被同一包中的任何一个类访问。称为包私有(package-private)或包内访问(package-access)。
private(方法、数据域):只能在自己的类中被访问(不能被其他类访问)。
从上到下限制越来越严格。
注意:1)子类可以将父类的protected方法的可见性改为public。当如果父类方法是public,子类中也必须定义为public。
2)终极类(public final class name{})不能被继承,终极方法(public final void function(){})不能被覆盖,final还可以用来修饰局部变量(终极局部变量),则为常量。
3. 是否可以继承String类?
不可以。因为String类是用final修饰的,故不能被继承。
4. 重载(Overload)和重写(Override)的区别。
重载:在一个类中,不同方法具有相同的名字,但有不同的参数列表,返回值类型可以相同也可以不同。
注意:1)被重载的方法必须具有不同的参数列表。不能基于不同修饰符或返回值类型来重载方法。
2)调用方法时,Java编译器寻找最精确匹配的方法。
3)歧义调用:调用一个方法时,会有两个或更多的匹配。如max(int,double)和max(double,int)都有可能与max(1,2)匹配。此时Java编译器无法判断哪个是最精确的匹配
重写(覆盖):子类从父类中继承方法时,修改父类中定义的方法的实现。这个方法在父、子类中具有相同的名字,相同的返回值类型,相同的参数列表,可以有不同的访问修饰符。
注意:1)仅当实例方法是可访问时,他才能被覆盖。所以私有方法不能被覆盖。如果子类中定义的方法在父类中 是私有的,那么这两个方法完全没有关系。
2)如需调用的父类的方法,可用super关键字。
3)与实例方法一样,静态方法也能被继承。但静态方法不能被覆盖。如果父类的静态方法在子类中被重新定义,那父类中的静态方法将被隐藏,可以使用父类名.静态方法名调用隐藏的静态方法。
5.抽象类和接口有什么异同?
接口是抽象类的变体。
抽象类:包含了一个或多个抽象方法的类。(可以不包含抽象类)
不同点:1)抽象类的变量无限制,接口的所有变量必须是public static final
2)抽象类可以有构造方法,接口没有构造方法
3)抽象类的方法无限制,接口的所有方法必须是公共的抽象实例方法(public abstract)
4)抽象类不支持多继承,接口支持多继承
5)抽象类可以有定义(抽象方法)和实现(普通方法),接口只有定义(跟第3条差不多一个意思)
相同点:都不能被实例化,都可以通过继承实现其抽象方法(必须实现全部抽象方法)。
6.Java中的final关键字有哪些用法?
1)修饰类(终极类--public final class name{}),则此类不能被继承。
2)修饰方法(终极方法--public final void function(){}),则此类不能被覆盖(修改)。
3)修饰变量,若修饰的是基本数据类型的变量,则为常量;若修饰的是引用类型的变量(即对象实例),则此对象不能再被重新赋值而指向另一个变量。
注:private 将方法隐式的指定为final类型
7.常见的运行时异常有哪些?
ArithmeticException(除数为零)
NullPointerException
IndexOutOfBoundsException
IllegalArgumentException(传递给方法的参数非法或不合适)等等
8.List、Set、Map是否继承自Collection接口?
List(ArrayList、Vector)与Set(HashSet、TreeSet)继承自Collection接口,而Map(HashMap、HashTable)与Collection同级。