1.什么是继承? 继承就是将多个类中的共有的数据提取出来封装到一个类中 让类与类产生关系 继承的好处:A提高代码的复用性解决代码冗余 B让类与类产生了关系 为多态提供了前提 继承的弊端:打破了封装 2.什么时候使用继承? 当类与类存在所属关系 is a 时,使用继承,不能因为只为了使用某一个功能而去继承,这样会提高耦合性。 3.子类重写父类方法时候需要注意些什么? 子类的权限修饰符必须大于或者等于父类的权限修饰符,父类的方法声明上有final或者private是不能被重写的 4.内部类(这个面试比较重要) 内部类:一个类定义在了另一个类里面,里面这个类就是内部类。 访问特点: 内部类可以直接使用外部类的成员,包括私有成员 外部类想访问内部类的成员,必须创建内部类的对象。 内部类的使用: 分类:成员内部类 局部内部类 使用:测试类,直接使用内部类: 可以使用,但是要加限定,格式是: 外部类名.内部类名 变量名 = 外部类对象.内部类对象; 内部类的修饰符 private 和 static 用private 修饰 是为了安全。定义一个方法提供公共的访问方式。(类比 标准学生类 将属性私有,提供公共访问方式) 用static修饰,为了方便。 格式:外部类名.内部类名 变量名 = new 外部类名.内部类名(); 局部内部类的使用问题: 局部代码块,为了缩短变量的声明周期。 局部内部类使用局部变量,这个变量必须被final修饰。(final 延长生命周期) 局部变量会随着方法的调用完毕而消失,但创建的内部类对象有可能还存在,还存在的东西想使用必须销毁了的东西 匿名内部类的格式:new 父类名&接口名(){ 定义子类成员或者重写父类方法 }.方法。 关于内部类的字节码文件命名规则(了解即可) 外部类名$内部类名 -- 成员内部类 外部类名$1内部类名 -- 局部内部类 5.说说什么是多态? 多态就是对象在不同时期的不同状态 多态的前提:要有父类的引用指向子类的对象 子类中有重写父类的方法 多态的好处:提高了代码的扩展性和可维护性 多态的弊端:父类不能调用子类特有的方法 6.集合 集合分单列集合和双列集合 单列集合的顶层接口是Collection 它下面有两大接口 List 和Set List接口子类有ArrayList LinkedList Vector ArrayList 底层是数组 查询快 增删慢 线程不安全 效率高 LinkedList 底层是链表 查询慢 增删快 线程不安全 效率高 Vector 底层数组 查询快增删慢 线程安全 效率低 Set接口有HashSet和TreeSet HashSet底层是哈希表 保证元素唯一依赖复写hashCode和equals 线程不安全 TreeSet底层是二叉树 保证元素唯一依赖实现 Comparable 和Comparator接口 Map接口子类有Hashtable HashMap TreeMap Hashtable HashMap 底层都是哈希表 保证键唯一依赖的是hashCode 和equals Hashtable 是不允许存储null的 线程安全 HashMap 允许存储null 线程不安全 TreeMap底层是二叉树 线程不安全 通过实现 Comparable 和Comparator接口实现键唯一 (1).让元素具有可比性,首先让元素实现Comparable接口,并覆盖CompareTo()方法:public int CompareTo(Object obj) (2).让集合具有可比性,首先让集合实现Compartor接口,并覆盖Compare()方法: public int Compare(Object obj) 7.集合和数组的区别: 1:数组是固定长度的;集合可变长度的。 2:数组可以存储基本数据类型,也可以存储引用数据类型;集合只能存储引用数据类型。 3:数组存储的元素必须是同一个数据类型;集合存储的对象可以是不同数据类型。 8.说说异常体系 顶层类是Throwsable 它两大子类是error 和Exception error是严重的异常 我们解决不了不需要处理 Exception 分RuntimeException 和非RuntimeException RuntimeException一般是不处理将来需要我们需改代码 非RuntimeException也叫编译期异常 必须处理 不然编译不通过
|