1.什么是Java的抽象?
Java中抽象是通过abstract单词声明,Java中abstract可以用来修饰类或者方法!被abstract修饰的类称为抽象类,被abstract修饰的方法称为抽象方法!所谓的抽象,就是将具象中物体的特征和行为进行提取后定义的结构就称为抽象!抽象需要通过具象来实现具体功能,并且这些抽象的内容在不同类实现后可以具有不同的特点!
2.抽象类的特点是什么?
(1). 被abstract修饰的类称为抽象类
(2). 抽象类比普通类中可以额外定义一个抽象方法的结构!
扩展:抽象类中可以定义成员变量、方法、构造方法、抽象方法!
建议:虽然抽象类可以定义那么多内容,但是抽象的本质还是在于设计,所以建议抽象类中只需声明抽象方法即可!
(3). 抽象类由于描绘的是未知的事物,所以无法直接构建对象,必须使用多态的形式借助子类构建对象!
3.抽象方法的特点是什么?
(1). 被abstract修饰的方法称为抽象方法
(2). 抽象方法只有方法的特征(只定义返回值类型、方法名、参数列表),没有方法具体的实现(没有方法体)
(3). 抽象方法在子类继承抽象类之后,必须在子类中重写后才具备具体的行为,并且不同的子类重写可能具有不同的行为!(一种多态的体现)
4.什么是Java接口?
Java中接口通过interface声明,接口本质上就是一个特殊的抽象类结构!可以看做抽象类的升级版!
官方版:接口是一些方法特征的集合,在接口中的方法只有特征没有实现的具体行为,这些方法在不同的地方实现可以具备不同行为功能!
接口的好处:
(1). 接口本质上就是一种规范,开发之前一定要先设计接口,然后多人开发按照接口的标准开发即可!可以防止因为规范不同导致的返工的情况!提高程序的可维护性!
(2). 减少模块之间的耦合度!不会因为某个模块运行失败后影响到其他模块的运行!
5.如何定义Java接口?接口中有哪些结构?
接口就是抽象类的升级版,所以接口中对于抽象类的结构也进行了升级和维护!接口中的结构更加的纯粹!不像抽象类那样可以定义很多多余的结构!
接口中存在两大结构:
(1). 常量:接口中的常量需要通过public static final修饰,但是在接口中允许这三个单词任意省略,省略后,单词作用依然存在!(常量建议全大写处理)
public static final int AGE = 100;
(2). 抽象方法:接口中的抽象方法需要通过public abstract修饰,在接口中允许这两个单词任意省略,省略后,单词作用依然存在!
public abstract void m();
6.接口和抽象类的区别是什么?
接口和抽象类本质思想没有太大区别,主要是接口相对于抽象类进行了升级!变得维护性和扩展性更高!至于面试如果问接口和抽象类的区别是什么,主要就是想听接口哪方面比抽象类要好!
(1). 结构上的区别:抽象类结构比较复杂,可以定义很多例如:成员变量、方法、构造方法等多余结构!因为抽象类主要的职责就是为了定义抽象方法而存在!接口的结构更加纯粹,只允许定义两大结构:常量和抽象方法(自从Java1.8版本之后,接口引入了两个新的结构:静态方法、默认方法)
(2). 代码量的区别:接口中所有的结构允许省略单词简化定义,但是抽象类中所有的结构必须完整定义!
(3). 扩展性的区别:抽象类只能单继承,但是接口允许多实现!并且类和接口的关系也允许扩展!
类和类之间的关系叫做继承关系!但是Java中规定类只能单继承!
类和接口之间的关系叫做实现关系!但是Java中允许多实现!
接口和接口之间的关系叫做继承关系!而且Java允许接口的多继承!
Java中允许先继承某个类的同时,再实现多个接口!(注意:一定要先继承然后再实现!)
7.什么是static关键字?static的作用是什么?
static关键字有两层含义:在Java中static可以用来修饰方法或者成员变量!
(1). 类访问修饰符:被static修饰的内容属于类中的信息,可以直接通过类名进行访问!
(2). 静态:被static修饰的数据在程序启动的瞬间就会被分配到方法区中的静态区中进行存储,并且直到程序终止的时候才会被销毁!
8.static内存角度的概念是什么?
以static修饰成员变量为例,在Java的类中如果一个成员变量被static修饰,那么又称为静态变量,如果一个成员变量没有被static修饰,那么又称为实例变量!
静态变量:又称为类变量,表示被static修饰的成员变量,静态变量属于类中的信息,每个类中的static修饰的内容都是通过类名进行访问!并且所有类中的static修饰的内容在程序运行的一开始就会被分配到方法区中进行存储!(不会随着对象的创建而创建多个!)static修饰的内容是在对象构建之前就已经被分配好内存空间,所以不用创建对象也可以直接访问!直到程序的终止,所有方法区中静态数据才会被统一进行销毁!
实例变量:就是不被static修饰的成员变量,随着对象的构建而被分配内存!并且每个对象的内部都有属于自己的实例变量!实例变量会随着对象的销毁而销毁!(对象允许在程序运行的过程中,自动被销毁,只要系统检测到这个对象不会再被使用了!)(销毁的对象之前会调用finalize方法进行最后的检测和回收!)
总结:static到底好还是不好?
优势:访问形式简单!访问速度快!
劣势:占用内存时间过长,会持续占用内存!
9.什么是final关键字?final关键字作用是什么?
final在Java中表示不可变、不可更改的含义,在Java中final可以用来修饰变量、修饰方法、修饰类!
(1). 变量(包含局部变量、成员变量):被final修饰的变量表示常量,即变量内部的数据无法被更改!并且常量必须设置初始值!Java中建议常量的名字全大写处理!
(2). 方法:被final修饰的方法表示不能被重写!
扩展:什么样的方法一般不允许被重写?绝大部分系统方法都是不允许被重写的,例如:Math.pow()方法
(3). 类:被final修饰的类表示不能被继承!
扩展:一般当类中所有的方法都不希望被重写时,建议通过final修饰类!