Java 基础面试题(二)

Java 基础面试题(二)

开始今天的学习吧!!!为了缓解视觉疲劳,也便于自己系统学习,以思维导图的形式给出!

1、构造器Constructor是否可被override?

在这里我们复习一下重写和构造函数的特点:
构造器与重写

重写的前提就是要能够被继承,根据它们的特点可知构造器无法满足函数重写的条件。
因为构造器的名字要求与类名相同,假设可以从写父类构造器,那么子类名字就得和父类名字相同,显然这是不可能的,所以不可能重写父类构造方法。但是可以被重载overload。
视频讲解链接:构造器

2、接口是否可以继承接口?抽象类是否可以实现接口?抽象类是否可以继承具体类?抽象类中是否可以有静态的main方法?

在回答这个问题之前,我们通过视频的方式来复习一下接口,抽象类以及静态方法。
视频讲解链接:
接口与抽象类
抽象类与接口的异同
实例应用
接口可以继承接口,抽象类可以实现接口,抽象类可以继承具体类。抽象类中可以有静态的main方法。 注意:记住抽象类与普通类的唯一区别就是不能创建实例对象和允许有abstract方法。

3、clone() 方法通常会有一行代码,是什么?

clone 有缺省行为,super.clone(); 因为首先要把父类中的成员复制到位,然后才是复制自己的成员。
视频讲解链接:
clone() API
clone() 使用

4、面向对象的特征有哪些方面?

思维导图:面向对象的特征
视频讲解链接:
封装
继承
多态

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

靠的是父类或接口定义的引用变量可以指向子类或具体实现类的实例对象,而程序调用的方法在运行期间才动态绑定,就是引用变量所指向的具体实例对象的方法,也就是内存里正在运行的那个对象的方法,而不是引用变量的类型中定义的方法。
视频讲解链接:多态实现机制

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

先来回顾一下这两个的基本概念:
含有abstract修饰符的class即为抽象类,abstract类不能创建实例对象。含有abstract方法的类必须定义为abstract class,abstract class类中的方法不必是抽象的。abstract class 类中定义抽象方法必须在具体子类中实现,所以不能有抽象构造方法或抽象静态方法。如果子类没有实现抽象父类中的所有抽象方法,那么子类也必须定义为abstract类型。
接口可以说成是抽象类的一种特例,接口中的所有方法都必须是抽象的。接口中的方法定义默认为 public abstract 类型,接口中的成员变量类型默认为 public static final。
区别的思维导图:抽象类与接口的区别
整体答题思路:先从基本概念说起,然后再比较两者的语法细节和应用区别,加上一个例子便于理解。
同2题视频讲解

7、什么是内部类? Static Nested Class(静态嵌套类) 和 Inner Class (内部类)的不同?

内部类就是一个在类的内部定义的类;在方法外部的内部类前面可以加上static关键字,从而成为Static Nested Class,它不再具有内部类的属性,所以从狭义上讲它不是内部类;在方法体内部还可以创建一种匿名内部类即定义某一接口或类的子类的同时,还创建了该子类的实例对象,无需为该子类定义名称。
思维导图:内部类与静态嵌套类

视频讲解链接:
内部类与静态嵌套类
成员、局部、匿名内部类

8、Anonymous Inner Class(匿名内部类)是否可以继承其他类,是否可以实现接口?

因为匿名内部类的前提必须是接口或者类,所以它可以继承其他类,也可以实现接口。
视频讲解链接:匿名内部类

9、super.getClass() 方法调用。

先看图中的代码及运行结果:getClass()
在test方法中直接调用getClass().getName()方法,返回的是ee类名,由于getClass()在Object中定义成了final,子类不能覆盖该方法,所以在test方法中调用getClass().getName()方法,其实就是在调用从父类继承的getClass()方法,等效于调用 super.getClass().getName() 方法,所以super.getClass().getName() 方法返回的是ee。想要获得父类的名称,应该使用如下代码:getClass().getSuperclass().getName()。
视频讲解:getClass()

10、String 是最基本的数据类型吗?是否可以继承String类?String和StringBuffer的区别?

基本数据类型:byte,int,char,long,float,double,boolean和short。java.lang.String 类是final类型的,因此不可以继承这个类,不能修改这个类,为了提高效率节省空间,我们应该使用StringBuffer类。
Java平台提供了两个类,String和StringBuffer,它们可以存储和操作字符串,即包含多个字符的字符数据。
思维导图:String和StringBuffer
我们可以通过一个例子来具体体会一下这两者的区别:运行时间如图所示,从代码示例中我们可以看出来使用String和StringBuffer运行同一段代码所用的时间不同,使用String的运行时间明显大于StringBuffer的运行时间,这是因为String的不可变性,每循环一次都要创建一次对象,而StringBuffer只需要创建一个对象即可!
视频讲解链接:
String和StringBuffer
超详解

好了,今天的学习到这里就结束了,希望也能帮到你们!

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值