java面向对象的三大特征
封装,继承,多态
封装说明一个类行为和属性与其他类的关系,低耦合,高内聚;继承是父类和子类的关系,多态说的是类与类的关系
封装隐藏了类的内部实现机制,可以在不影响使用的情况下改变类的内部结构,同时也保护了数据。外界对他的内部细节是隐藏的,暴露在外界的只是它的访问方法。属性的封装:使用者只能通过事先定制好的方法来访问数据,可以方便的加入逻辑控制,限制对属性的不合理操作;方法的封装:使用者按照既定的方式调用方法,不必关系方法的内部实现,便于使用;便于修改,增强代码的可维护性;
继承是从已有的类中派生出的类,新的类能够吸收已有类的数据属性和行为,并能拓展新的能力。在本质上子类继承父类,表明子类是一种特殊的父类,并且具有父类所不具备的一些属性和方法。从多种实现类中抽象出一个基类,使其具备多个实现类的共同特性,当实现类用extends关键字继承了基类后,实现类就具备了这些相同的属性。继承的类叫做子类,被继承的类叫做父类。父类中通过private定义的变量和方法不会被继承,不能在子类中直接操作父类通过private定义的变量以及方法。
相比封装和继承,java多态是三大特性中比较难的一个,封装和继承最后归结于多态,多态指的是类和类的关系,两个类由继承关系,存在有方法的重写,故而可以在调用时有父类引用指向子类对象。多态必备三个要素:继承,重写,父类引用指向子类对象。
ArrayList和LinkedList的区别
数据结构上的差别,动态数组和双向链表
ArrayList是一个容量能够动态增长的动态数组,继承自AbstractList,实现了List接口,底层基于数组实现容量大小动态变化,允许null的存在。
LinkedList从数据结构上来看的话,是一个双向链表,每个节点包含数据元素和指向前一个节点和后一个节点的引用。
随机访问效率
ArrayList比LinkedList在随机访问的时候效率要高,因为LinkedList是线性的数据存储方式,所以需要移动指针从前往后依次查找
增加和删除效率
LinkedList比ArrayList效率要高,因为ArrayList增删操作要影响数组内的其他数据下标
内存空间占用
LinkedList更加占用内存,因为LinkedList的节点除了存储数据,还存储了两个引用,一个指向前一个元素,一个指向后一个元素。
综合来说,在频繁读取集合中的元素的时候,更加推荐使用ArratList,而在插入和删除操作较多时,更加推荐使用LinkedList。
JDK1.8的新特性有哪些?
java8允许我们给接口添加一个非抽象的方法实现,只需要使用default关键字,这个特征又叫扩展方法
点击查看代码
interface Formula {double calculate(int a);
default double sqrt(int a){return Math.sqrt(a);}}
Formula接口在拥有calculate方法之外同时还定义了sqrt方法,实现了Formula接口的子类只需要实现一个calculate方法,默认方法sqrt将在子类可以直接使用。
Lambda表达式
在老版的java中排序字符串,只需要给静态方法Collections.sort传入一个List对象以及一个比较器来指定顺序排列,通常做法都是创建一个匿名的比较器对象然后将其传递给sort方法。
在java8中提供了更简洁的语法,lambda表达式
Collections.sort(names,(a,b)->b.compareTo(a));
java编译器可以自动推导出参数类型,所以你可以不用再写一次类型。
Lambda表达式中访问外层作用域和老版本的匿名对象中的方式很相似,你可以直接访问标记了final的外层局部变量,或者实例的字段以及静态变量
并且我们可以直接在lambda表达式中访问外层的局部变量
Java中的抽象类和接口?
相同:
1.不能够实例化
2.可以将抽象类和接口类型作为引用类型
3.一个类如果继承了某个抽象类或者实现了某个接口都需要对其中的抽象方法全部进行实现,否则该类仍然需要被声明为抽象类。
不同:
抽象类:
1.抽象类中可以定义构造器
2.可以有抽象方法和具体方法
3.接口中的成员全部是public的
4.抽象类中可以定义成员变量
5.有抽象方法的类必须被声明为抽象类,而抽象类未必要有抽象方法
6.抽象类中可以包含静态方法
7.一个类只能继承一个抽象类
标签:面试题,Java,LinkedList,继承,子类,小练,抽象类,父类,方法 From: https://www.cnblogs.com/yifan0820/p/17796010.html接口:
1.接口中不能定义构造器
2.方法中全部都是抽象方法
3.抽象类中的成员可以是private,默认,protected,public
4.接口定义的成员变量实际上都是常量
5.接口中不能有静态方法
6.一个类可以实现多个接口