java面试题(九)

20、接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承具体类(concrete class)? 抽象类中是否可以有静态的main方法?

     答:

     接口可以继承接口;抽象类可以实现接口;抽象类可以继承具体的类;抽象类中可以有静态的main方法;

     因为抽象类和普通类的区别就在与抽象类不能实例化而且由abstract修饰,其它则一样

23、java中实现多态的机制是什么?

       这儿主要用到了动态绑定,父类或者接口的引用指向子类或者具体实现类的实例对象,在程序调用方法时才动态绑定,即引用变量指向具体的实例对象的方法,而不是指向引用变量类型中的方法

24、abstract class和interface有什么区别?

1) 抽象类和接口的共同点:

    二者都不能被实例化

   interface实现类及abstrct class的子类都必须要实现已经声明的抽象方法。

2)不同点

  1. 语法上:抽象类 是由abstract修饰的而接口是由interface关键字修饰
  2. 接口中只能有抽象方法,而抽象类中允许有普通方法和抽象方法
  3. 接口中的变量只能有public final static修饰默认就是它修饰,而抽象类中可以有普通成员成员变量
  4.  interface需要实现,要用implements,而abstract class需要继承,要用extends。
     一个类可以实现多个interface,但一个类只能继承一个abstract class。
  5. 抽象类可以有静态方法(包括静态main方法)而接口不能有静态方法
  6. 抽象类可以有构造方法,而接口不能有构造方法

 

25、abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized?

       1)、abstract的method 不可以是static的,因为static与abstract不能同时使用。用static声明方法表明这个方法在不生成类的实例时可直接被类调用,而abstract方法不能被实例化的,两者矛盾。

  2)native:用来声明本地方法,该方法的实现由非java 语言实现,比如C。一般用于java与外环境交互,或与操作系统交互。 native可以与所有其它的java 标识符连用,但是abstract除外。因为 native 暗示这些方法是有实现体的,只不过这些实现体是非java 的,但是abstract却显然的指明这些方法无实现体

     3)synchronized:用于防止多个线程同时调用一个对象的该方法,与static连用可防止多个线程同时调用一个类的该方法。abstract与synchronized不能同时使用,从synchronized的功能也可以看出,用synchronized的前提是该方法可以被直接调用,显然不能和abstract连用。

26、什么是内部类?Static Nested Class 和 Inner Class的不同。

     答:内部类即定义在一个类内部中的类,

     

Inner Class(内部类)定义在类中的类。 (一般是JAVA的说法)

Nested Class(嵌套类)是静态(static)内部类。(一般是C++的说法)
静态内部类:1 创建一个static内部类的对象,不需要一个外部类对象2 不能从一个static内部类的一个对象访问一个外部类对象

Java内部类与C++嵌套类最大的不同就在于是否有指向外部的引用上。

内部类:就是在一个类的内部定义的类,

A.非静态内部类中不能定义静态成员(静态对象是默认加载,那么静态内部类应该先于外部类被加载到内存中)

当内部类中如果有静态成员时,该内部类也必须是静态的。而静态内部类只能访问外部类中的静态成员。 会出现两种情况:

1,内部类静态,但是方法没静态。该方法需要被对象调用执行。

   Outer.Inner in = new Outer.Inner();//产生了一个静态内部类对象。

   in.show();

2,内部类静态,而且方法也是静态的。静态内部类随着对象的加载就已经存在了,静态方法随着内部类的加载也存在了。这时是不需要对象的。

   Outer1.Inner.show();

 

B.内部类可以直接访问外部类中的成员变量

非静态的内部类之所以可以直接访问外部类中的成员,那是因为内部类中都持有一个外部类对象引用:外部类名.this.变量名

静态内部类之所以可以直接访问外部类中的静态成员,其实持有的是外部类名。

 

C.内部类可以定义在外部类的方法外面,也可以定义在外部类的方法体中,如下所示:

在方法体外面定义的内部类的访问类型可以是public,protected,默认的,private等4种类型,它们决定这个内部类的定义对其他类是否可见;对于这种情况,我们也可以在外面创建内部类的实例对象,一定要先创建外部类的实例对象,然后用这个外部类的实例对象去创建内部类的实例对象,代码如下:

Outer outer = new Outer();

Outer.Inner1 inner1 = outer.new Innner1();

 

在方法内部定义的内部类前面不能有访问类型修饰符,但前面可以使用final或abstract修饰符。这种内部类对其他类是不可见的其他类无法引用这种内部类,但是这种内部类创建的实例对象可以传递给其他类访问。这种内部类必须是先定义,后使用,即内部类的定义代码必须出现在使用该类之前,这与方法中的局部变量必须先定义后使用的道理也是一样的。这种内部类可以访问方法体中的局部变量,但是,该局部变量前必须加final修饰符。

 

27、内部类可以引用它的包含类的成员吗?有没有什么限制?

    如果不是静态内部类可以访问外部类的成语,如果是静态内部类就只能访问静态成员

28、Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)?

答:

 从语法上讲匿名内部类是不可以继承其它类和实现接口的,但是因为每个匿名内部类都有一个基类所以可以利用它来继承其它的类或者实现接口

30、String是最基本的数据类型吗?

String不是基本数据类型,基本数据类型包括byte、int、char、long、float、double、boolean和short这八类。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值