java面试题(二)

第二部分   类之间的关系


1.用代码表示A类关联B类的情况

解析:一个Java应用中不可能只有一个类,所以了解类之间的关系对程序员来说非常重要。关联关系是最常用的一种关系,如果说A关联B,那么就是B作为A的属性存在。关联关系是一种复用的策略,即A关联B的时候,A可以复用B的行为。

参考答案:

ClassA{

        Private B b;

Publicvoid setB(B b){

This.b=b;

}

}

 

2.请说明Java语言中数组的基本概念,数组的作用,以及数组的声明创建方式

解析:数组时任何一门语言里都常用的类型,Java语言也不例外。程序员了解数组,不能仅仅从语法上了解,而应该深入理解数组的作用。数组可以用来存储类型相同的元素,作为一种数据容器使用。和数组类似的概念是集合,也能作为数据容器使用。

参考答案:数组时相同元素的集合,作为数据容器使用。声明创建一个int型数组,如下所示:int[]x=new int[3];其中3是数组的长度,该数组能够存储3个int型变量。

 

3.使用代码,创建一个长度为5的String型数组,并使用增强for循环迭代数组打印出数组中的元素。

解析:增强for循环是JDK5增加的特性,可以方便地遍历数组或集合。程序员需要了解的是,如果JDK版本低于5.0,则不支持这个功能。另外,并不是说有了增强for循环后,传统的for循环就不被使用,增强for循环只能用来方便地遍历数组和集合,其他情况下还要使用传统的for循环。

 

参考答案:

     String[] sArray = new String[5];

for(Strings:sArray){

  System.out.println(s);

}

 

4.说明Arrays类的作用。

解析:在实际工作中,常常需要对数组中的元素进行处理,例如排序等。初级程序员往往选择自己编写算法实现。实际上APV中提供了Arrays类,该类中定义了很多和数组有关的工具方法,能够方便地处理数组,是程序员必须掌握的类。

 

参考答案:Arrays类是java.util包中的一个类,类中所有的方法都是static方法,这些方法都是数组对象的工具方法,能够对数组进行处理,如sort方法可以对数组元素进行排序

 

5.请使用简单代码展示A类依赖B类的含义。

解析:对于程序员来说,了解类和类之间的关系非常必要。依赖关系指的是一种瞬间的关系。如果A依赖B,一般指的是A类的某个行为,需要B类对象作为参数。

 

参考答案:

class A{

public void f(B b)

}

 

6.请说明依赖关系和关联关系的区别。

解析:关联关系和依赖关系是非常常见的两种关系,二者的区别也很明显,程序员了解二者的区别能够更深入的理解面向对象的思想。

参考答案:依赖关系是一种瞬时关系,A依赖B,指的是A的某个行为的参数是B的类型,也就是说,A要想实现这个行为,必须依赖B的实例,A关联B,是一种长久的关系。关联关系的是B作为A的属性存在,只要实例化一个A的对象,就会为这个A的对象实例化一个B的对象,作为它的属性使用,可以在A中任何需要使用B的地方使用B。

 

7.继承有什么作用,Java语言中的继承有什么特点?

解析:继承是面向对象语言的一大特征,主要作用是重复使用,子类通过继承父类,能够重复使用父类的属性和方法。指的注意的是,有两个策略都可使实现重复使用,一个是关联,一个是继承,实际编程中,关联用的更多。因为子类继承父类后,相当于父类中的细节将暴露给子类。初级程序员一定不要随意使用继承,避免滥用继承。

参考答案:继承主要为了能够重复使用父类中的成员。Java语言中的继承是单继承,也就是说一个类最多只能继承一个父类。

 

8、什么是方法覆盖(override)?并说明方法覆盖与方法重载(overioad)的区别。

解析:方法覆盖是一个非常重要的概念,是多态性的一个体现。方法覆盖发生再去爱继承关系中,当子类需要修改从父类继承到某个方法的方法体时,就可以声明一个父类同名同参数同返回值的方法,这样就对父类中的那个方法进行了覆盖,子类对象调用该方法时将自动绑定到子类中的方法。API中很多类中都进行了方法覆盖,如String类中的toString方法,就覆盖了父类Object中的toString方法。

参考答案:覆盖是发生在继承关系的子类中,当子类要修改从父类继承的某个方法的方法体时,就可以在子类中声明一个与父类同名、同参数并且同返回值类型的方法,这就是方法覆盖。而重载与继承没有关系,指的是在一个类中可以同时声明多个同名但不同参数的方法,称为重载。

 

9、请说明什么是抽象类?抽象类有什么作用?

解析:初级程序员往往不需要自己创建抽象类,但是必须了解抽象类的概念,并且会使用抽象类。抽象类往往是设计阶段的概念,用来定义多个子类的模板,一些具体的实现可以在子类中进行。初级程序员往往需要会创建子类继承抽象类,实现抽象类中的方法。在API中,抽象类比比皆是。

 

参考答案:抽象类是不能实例化的类,使用abstract修饰。抽象类往往用来做父类使用,定义一些子类的共同属性或行为。

 

10、请说明抽象方法的含义,并说明抽象类与抽象方法的关系。

解析:抽象方法都是在抽象类中定义的,是用来定义子类what to do的策略,而具体的how to do都在子类中实现。

 

参考答案:抽象方法是没有办法体的方法,使用abstract修饰。抽象类中不一定有抽象方法,但是有抽象方法的类一定是抽象类。

 

11、super关键字的两种用法。

解析:使用一些IDE生成代码时,常常会在构造方法中见到super这个关键字。顾名思义,super是和父类有关的一个关键字,熟悉super的用法对熟练掌握继承很有必要。

 

参考答案:如super():表示调用父类中的每一参考的构造方法:又如super(10);表示调用父类中的具有一个整型参数的构造方法。第二种用法是在子类中调用父类中的成员,如super.f();意思是调用父类中的f()方法。

 

12、final类与final方法有什么作用?

解析:final修饰符是一个用途非常广泛的修饰符,可以修饰类,方法,以及属性。

 

参考答案:final类是不能够被继承的类,称为终极类,如String类就是final类,不能有子类。final修饰方法后,是终极方法,不能被子类覆盖,但是可以被子类继承使用。

 

13.什么是多态函数?多态函数有什么用?

解析:多态性是面向对象语言的的一大特征,重载,覆盖,多态参数是多态性的一种表现形式。多态参数处处可见,例如某方法f(Object o),这个方法的参数类型是Object,使用该方法时,只要传递给f的单数类型是Object即可。也就是说,Object类的任意参数可以传递给f方法。这就是多态参数。意思是对外形式都一样,都是Object,具体实现可以是这个类型的任意子类,这就使得该方法比较灵活,Object类即使有了新的子类,却不需要修改,就能直接作用到那个子类。了解多态参数的含义和使用,对于Java的使用特别关键。

 

参考答案:多态函数就是参数的类型是某个父类类型,具体为这个参数赋值的不同以使用该父类的任意子类的对象。使用多态参数,可以使程序的扩展性更好,即使%%%%的子类方法不需要任何修改,就能接受子类类型进行处理。

14.Object类有什么特点?

解析:Object类是一个非常重要的类,是所有类的父类,包括数组在内,也就是对一个Java类,不管是API中定义的,还是自定义的类,都直接或间接的继承了Object类。所以,如果有一个方法f(Object o),那么可以传递给这个方法任意一个类的对象,包括%%%%。因为所有对象都可以说是Object类型。

参考答案:Object类是多有类的直接或间接的父类。

 

15.Object类中的toString方法有什么用?

解析:Object类是所有类的父类,所以Object类中的方法是所有类都默认具备的。类中的toString 方法可以将任意一个对象作为字符串返回, API中很多类已经覆盖了这个方法,将其返回值的格式进行了自定义,如String类中的方法已经覆盖为返回字符串的字符序列。toString 方法在很多场合被自动调用,例如打印一个对象时,就自动调用该对象的toString 方法。

参考答案:toString方法可以把对象作为字符串返回。

 

16.Object类中的equals方法和hashCode 方法。

解析:在Object类中,equals方法比较对象的引用值,也就是只有物理上是同一对象的两个引用,在使用equals方法返回true。hashCode方法返回一个对象的内在地址的十六进制值。由于Object类是所有类的父类,所以任意类中都拥有这两个方法,并都可以进行覆盖。尤其是操作Set,Map对象时集合元素类的equals方法和hashCode方法非常必要。

参考答案:Oject类中的equals方法用来比较两个引用值,hashCode用来返回引用的内地址的十六进制数值。在Set以及Map集合中,判断两个元素是否重复时,往往需要使用这两个方法。这两个方法往往被子类覆盖,覆盖的规则是:如果存在x和y两个对象,调用x.equals(y)返回true时,那么调用hashCode方法的返回值也该相同;如果x.equals(y)返回false时,那么调用hashCode方法返回的值可能相同,也可能不同。

 

17.接口有什么特点,与抽象类有什么区别?

解析:接口的概念是一个设计层面的概念,初级程序员往往不会自己定义接口,但是会使用接口,理解接口的概念非常必要。接口定义了实现类的规范,即what to do的部分,所有实现类必须按照这个规范进行实现。

 

参考答案:接口的特点是不能定义变量,而且所有方法都是抽象方法。而抽象类中可以有变量,也不强制必须有抽象方法。

 

18.类继承父类与类实现接口,有什么区别?

解析:类继承父类与类实现接口,本质上其实是一样的。都是将父类或者接口作为模板,在这个模板上进行扩展或者重写。程序员在实际编程中,常常需要继承父类或者实现接口。

 

参考答案:类继承父类只是单继承,也就是一个子类最多只有一个父类;而类实现接口可以多实现,就是一个子类可以同时实现多个接口,并覆盖所有接口中的所有抽象方法。

 

19.Comparable接口有什么作用

解析:comparable接口是在实际编程中常常使用的接口,该接口定义了comareTo(Object o)方法,用来定义对象的比较逻辑。这个接口常常在其他API中会强制使用,例如Arrays类的sort(Object[])方法,就强制数组元素必须实现Comparable接口,与这个接口类似的另外一个接口是Comparator。

 

参考答案:Comparable接口定义了compareTo(Object o)方法,可以用来实现对象的比较逻辑,这个接口常常在其他API中强制使用,用来规范对象的比较逻辑。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值