Java常见面试题汇总-----------Java基础(抽象类和接口、构造方法、内部类、枚举类)

本文详细探讨了Java中的抽象类与接口的区别,包括它们的特性、使用场景以及在新版本中的变化。同时,讲解了构造方法的原理、重载以及复制构造方法的概念。此外,还深入介绍了Java内部类的四种类型以及枚举类的用法和相关方法。这些知识点对于理解和掌握Java编程至关重要,同时也是面试中常见的考察点。
摘要由CSDN通过智能技术生成

7. 抽象类和接口的比较

  1、什么是抽象类? 就是对类更高的抽象。抽象类作为多个子类的共同父类。它所体现的是一种模版设计,抽象类作为多个子类的父类,可以把它理解为系统实现过程中的中间产品,这个中间产品已经实现了系统的部分功能,但是不能当成最终产品,还需要进一步的完善。
  当父类的一些方法不能确定时,可以用abstract关键字来修饰该方法【抽象方法】,用abstract来修饰该类【抽象类】。
  1)、抽象类不能被实例化。
  2)、用abstract关键字来修饰一个方法时,这个方法就是抽象方法,抽象方法不能有主体【即不能实现】;用abstract关键字来修饰一个类时,这个类就叫抽象类。
  3)、抽象类不一定要包含abstract方法。也就是说抽象类可以没有abstract方法;但是一旦类包含了abstract方法,则这个类必须声明为abstract。

  2、什么是接口? 接口是一种规范,就像现实中生产主板和内存条或者网卡的不是同一家产商,但是为何内存或者网卡插入到主板上就能用呢,因为他们都遵守了某种规范。然后就可以使用。虽然他们的内部实现可能完全不同。就好比在java语言中的方法内部实现你不需要关心,只需要知道这个接口是怎样的干嘛的就行了,直接用。既然是一种规范,那他在编程语言中就能在架构中起到非常之大的作用,在一个应用程序之间的时候,接口体现的是一耦合标准。特别是在多个应用程序需要对接的时候。接口是多个应用程序的通信标准。接口就是给出一些没有内容的方法,封装在一起,到某个类要使用的时候,再根据具体情况把这些方法写出来。
  接口是更加抽象的抽象的类,抽象类里的方法(非抽象方法,抽象类可以有非抽象方法)可以有方法体,接口里的所有方法都没有方法体。接口体现了程序设计的多态和高内聚低偶和的设计思想。
  1)、接口中的所有方法都不能有主体,不能被实例化。
  2)、一个类可以实现多个接口。
  3)、接口中可以有变量【但变量不能用private和protected修饰】。a、Java接口中的变量是公共的(public),静态的(static),最终的常量(final),相当于全局常量,所以定义接口变量时必须初始化。 b、接口中的变量,本质上都是static的,不管你加不加static修饰。c、在java开发中,我们经常用的变量,定义在接口中,作为全局变量使用。访问形式:接口名.变量名。
  4)、一个接口不能继承其它的类,但是可以继承别的接口。
  5)、接口没有方法就可以作为一个标志,比如可序列化的接口Serializable,没有方法的接口称为空接口。

7.1. 抽象类与接口的比较

  接口和抽象类都不能实例化,他们都位于继承树的顶端,用于被其他类实现和继承。接口和抽象类都可以包含抽象方法,实现接口或继承抽象类的普通子类都必须实现这些抽象方法。
  他们的区别:
  1、属性:接口没有普通属性

http://blog.csdn.net/methods2011/article/details/8584463 Java中的继承与静态static等的执行先后顺序的面试题 java面试题静态加载顺序构造方法 继承与static 面试题目如下:请写出程序执行完成之后的结果。 package extend; public class X { Y y=new Y(); static{ System.out.println("tttt"); } X(){ System.out.println("X"); } public static void main(String[] args) { new Z(); } } class Y{ Y(){ System.out.println("Y"); } } class Z extends X{ Y y=new Y(); static{ System.out.println("tt"); } Z(){ System.out.println("Z"); } } 先不告诉最后结果,我们先来分析下。一步一步推出结果。 1.首先分析一段程序的执行后的结果,我们得先找到程序的入口,然后才能着手分析。 也就是main()方法。 2.我们发现main()方法在X类中,要执行main()方法,还得先将X类加载到内存中。 3.X类加载完成后,会做什么事情呢?别急,先来看看static的作用,不知道吧。告诉你:static就是在类被第一次加载的时候执行,以后就不再执行。 4.知道了static的作用,那么X类被加载,那么就会先执行X类的静态属性和静态语句块(static),执行先后顺序看谁在前面就先执行谁。只在此时执行,以后都不会。 5.所以一个输出结果为tttt,没问题了吧。 6.X类的static语句块执行完了,就该执行main()方法啦。 7.new Z();此方法被执行。 8.既然new Z();那么Z类就要被加载。因为Z类继承X类。所以必须先加载X类才行。因为X类已经被加载。所以此时不用再加载X类了。Z类加载好了就要执行Z类的static语句块 9.那么就会打印出tt了吧。 10.都加在完后就要实例化对象了。 11.实例化Z之前,还得先实例化X对吧。因为子类构造方法都会调用父类的构造方法。 12.那就先实例化X类吧。 13.执行X方法前还得先初始化对不。也就是获取所有属性。那么X类的属性Y就会获取。 14.即X类的Y y=new Y();要被执行。也就是会打印Y。 15.接着执行System.out.println("X"); 16.然后就是执行Z的构造方法 17.同样先获取Z的属性Y y=new Y();打印Y。 18.再执行System.out.println("Z"); 整个过程就是这样了。现在知道结果了吧: tttt tt Y X Y Z http://snow4909.diandian.com/post/2013-02-17/40049419937 记住,面试有可能会标出一些语句的,让你选择这些语句的执行顺序。不过只要知道原理,就没什么难的了。 执行先后顺序: 1、类加载到内存时static 加载进内润 2、调用类的构造方法时先调用父类的构造方法,在调用子类构造方法 3、类初始化时,先初始化类的属性成员,在执行构造方法
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值