面向对象(二)
·请你讲讲abstract class和interface有什么区别?
abstract class 是抽象类,只支持单继承,不支持多继承
interface是接口,支持实现多接口,即所谓的多继承
·请说明Overload和Override的区别,Overloaded的方法是否可以改变返回值的类型?
- Overload为方法重载,指在一个类中,可以有两个或多个方法名相同,但参数个数或类型不同的方法,叫做方法的重载
- Override为方法重写,指子类继承父类时,书写了与父类相同的方法名和参数,叫做方法的重写,也叫作方法的覆盖,因为在调用子类方法时,会将父类中的方法“屏蔽”。
- OverLoaded的方法可以改变返回值类型
·请说明一下final, finally, finalize的区别。
- final用于声明属性,方法和类,分别表示,属性不可变,方法不可覆盖,类不可继承
- finally是异常处理时语句结构的一部分,表示总是执行
- finalize是object类的一个方法,回收垃圾使用此方法
·请说明面向对象的特征有哪些方面
- 抽象:抽象即为描述一个类,并不是一个具体的实例,这个类代表具有相同行为的一系列事物,较为笼统,抽象包括两个方面:过程抽象,数据抽象
- 继承:继承即为,一个类可以继承原始类的特性,这一个类叫做派生类(子类),原始类叫做基类(父类),子类可以继承父类的方法和实例变量,并且进行修改和添加新的方法以便使用
- 封装:即为将过程和数据包围起来,形成一个封装,对于这个封装的访问,只能由已定义的界面。
- 多态性:指不同类的对象对同一消息作出响应,多态性包括参数化多态性和包含多态性。多态语言更加的灵活,抽象,行为共享,代码共享的优势,很好解决了应用程序函数同名问题。
·请说明Comparable和Comparator接口的作用以及它们的区别。
- comparable接口只包含compareto()方法,这个方法将两个对象进行排序,如果返回负数,0,正数,则说明,输入的对象小于,等于,大于已存在的对象
- comparator接口包含equals()方法和compare()方法。
compare()方法给两个输入参数进行排序,返回值为负数,0,正数,则第一个参数小于,等于,大于第二个参数
equals()方法需要一个对象作为参数,用来决定是否和comparator相等。只有当输入参数是一个comparetor并且排序相同的时候,返回值才会返回true。
·接口和抽象类的区别是什么?
- 接口中的方法隐含的都是抽象的,抽象类中的方法可以包含抽象和非抽象的
- 类可以实现多个接口,而只能继承一个抽象类
- 抽象类可以在不提供接口实例方法实现的情况下实现接口
- 接口中声明的变量默认都是final的,抽象类可以包含final和非final的变量
- 接口中成员函数默认为public,抽象类的成员函数可以使public,private,protected
- 接口是绝对抽象的,不可被实例化,抽象类也不可以被实例化,但是如果有main方法,则可以被调用
·说明java是否支持多继承?
Java不支持多继承,只支持单继承,接口支持多继承,即一个子接口可以有多个父接口
·请你谈谈如何通过反射创建对象?
方法1:通过类对象调用newInstance()方法,例如:String.class.newInstance()
- 方法2:通过类对象的getConstructor()或getDeclaredConstructor()方法获得构造器(Constructor)对象并调用其newInstance()方法创建对象,例如:String.class.getConstructor(String.class).newInstance(“Hello”);
·请你说明是否可以在static环境中访问非static变量?
static变量在Java中是属于类的,它在所有的实例中的值是一样的。当类被Java虚拟机载入的时候,会对static变量进行初始化。如果你的代码尝试不用实例来访问非static的变量,编译器会报错,因为这些变量还没有被创建出来,还没有跟任何实例关联上。