- 1.抽象类和接口的区别 ,试举一例
抽象类为父类,是class,用abstract修饰,定义了该类型事物的共性属性与行为,方法通常定义为抽象方法,子类继承父类
如员工类可以定义为抽象父类,不同的员工厨师,服务员,经理均可以继承该父类。
接口为规范,是interface,是功能的集合,定义了符合该规范的多个方法
如飞行功能可以定义为接口,规定了起飞,飞行,降落方法,不同的类想要符合飞行规范只需要实现该接口,如飞机与小鸟都可以实现该接口
相同点
都不可以创建对象
不同点
抽象类是is a的关系,子父类为同种事物,接口是like a的关系,子父类不为同一种事物。
抽象类当中可以有构造方法,接口中没有
抽象类当中可以定义非抽象方法,1.9之前JDK版本接口中所有方法必须为抽象方法
抽象类中可以有成员属性,接口中只有静态常量
抽象类中没有固定修饰符,接口中方法有固定修饰符public abstract,常量有固定修饰符public static final
举例:动物类,鸟类,狗类,飞机类,飞行接口说明
抽象类
动物类可以定义成抽象类,因为动物类是抽象事物,
鸟类与狗类可以定义为动物类子类,是动物的一种
飞机类可以定义为一个单独类,不属于动物的子类
飞行接口
飞行功能如果定义在鸟类与飞机类中,则代码重复
飞行功能如果定义在动物类中,则并不是所有动物都具备飞行方法
所以飞行功能应该定义在飞行接口中,所有需要飞行功能规范的类只需要实现飞行接口即可。
2.常用的集合有哪些,谈谈对它们的理解
List集合
ArrayList,底层是数组结构的单列集合,增删慢,查找快,有序,有索引,元素可以重复
LinkedList集合,底层链表结构的单列集合,增删快,查找慢,有序,有索引,元素可以重复
Set集合
HashSet 集合,无序无索引无重复的单列集合
Map集合
HashMap集合,双列集合,存的是键值对,每一个键对应一个值,键不可重复,值可以重复,无序,无索引
3.final, finally, finalize 的区别
3.1:final是Java中的关键字,修饰符。
3.1.1:被final修饰的变量叫做常量,常量的值不能更改。常量名必须全部大写,多个字符之间用 _ 连接
3.1.2:被final修饰的方法不能被子类重写
3.1.3:被final修饰的类不能作为父类被继承
3.2:finally:Java中的一种异常处理机制,写在catch代码块下面
3.2.1:finally中的代码一定会执行,不管有没有异常发生
3.3:finalize是Java中Object类的一个方法
3.3.1:finalize是在垃圾收集器执行的时候(不定期执行)会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他 资源回收,例如关闭文件等。
4.Java 中有几种类型的流?分别是什么?
两种类型:
字节流、字符流
字节流分为:
字节输入流:InputStream(接口)
文件字节输入流:FileInputStream
对象字节输入流:ObjectInputStream
高效字节输入流:BufferedInputStream
字节输出流:OutputStream(接口)
文件字节输出流:FileOutputStream
对象字节输入流:ObjectOutputStream
高效字节输入流:BufferedOutputStream
字节打印流:PrintStream
字符流:
字符输入流:Reader(接口)
文件字符输入流:FileReader
转换输入流:InputStreamReader
高效字符输入流:BufferedReader
字符输出流:Writer(接口)
文件字符输出流:FileWriter
转换输出流:OutputStreamWriter
高效字符输出流:BufferedWriter
字符打印流:PrintWriter
5.面向对象的四个基本特征
封装:对外隐藏实现细节,留出访问接口(如getter//setter方法)
特点:通过特定方法访问,提高代码复用性和安全性,方便修改和实现
继承:父类中定义给类事务的共有行为与属性,新的子类能继承已有类的所有成员变量和成员方法,也可以有自己的属性和方法
优点:提高代码复用性,父类方法可以用于子类
多态:同一事物表现出来的多种形态
存在的三个必要条件:
1,有继承的关系存在(实现接口也是一种继承)
2,有方法重写
3,有父类引用指向子类对象
- 异常处理的时候,finally代码块的重要性是什么?
答:finally是java的一种异常处理机制。
(1)finally结构使代码总会执行,不管有无异常发生。
(2)使用finally可以维护对象的内部状态,并可以清理非内存资源
抽象:规定一类事物该有的基本的功能和属性,但是没有具体怎么实现的概念
抽象方法要用abstract关键字声明
抽象类带有抽象方法,抽象方法可以只声明不需要方法体
含抽象方法的类必须被声明为抽象类,抽象类的子类必须实现所有的抽象方法后,才能被实例化,否则这个子类还是抽象类。 - 代码中如何实现多态 ,试举一例
答案:
多态需要前提:有继承或实现关系
多态的格式为:父类引用指向子类对象
多态的使用场景有很多,如方法参数为父类或接口,调用方法时传入子类或实现类对象
比如:
创建一个抽象的Animal父类对象 父类对象中有public abstract void eat(Animal a );的方法 参数为Animal a
创建一个子类Dog对象 继承父类 重写父类eat方法
创建一个子类Cat对象 继承父类 重写父类eat方法
创建一个测试类 创建父类引用指向子类对象如:( Animal a = new Dog(“小狗”);
调用方法 a.eat(a);
因为不同子类用不同方式重写了eat方法。所以传入不同子类对象虽然运行的均为eat方法,但运行结果不同。 - 说说你对于static关键字的理解 (概念:属于类,优先于对象,使用:类名.的方式,注意事项:静态方法不可以直接调用非静态成员 )
如果一个类中有抽象方法,那么这个一定是抽象类?抽象类必须要有抽象方法吗
static是静态修饰符,可以修饰成员
被static修饰的成员属于类而不属于对象
static修饰内容随着类的存在而存在 优先对象
static修饰的内容可以使用类名.的方式访问,无需创建对象
静态方法不可以直接调用非静态成员
一个类中有抽象方法那么就一定是抽象类,抽象类不一样要有抽象方法
- Java中的访问权限有哪些 ,分别权限范围是什么?
public公共 protected受保护 包权限(无) private私有
同类中 √ √ √ √
同包 √ √ √
不同包子类 √ √
不同包 √
10.接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可以继承实体类
接口可以继承接口,并且可以多继承接口。
抽象类可以实现接口,并且可以多实现接口。
抽象类可以继承实体类,并且只能单继承。