1.请谈谈Java中设计模式的分类,并简要概述其中工厂模式与抽象工厂模式的区别。
总体来说设计模式分为三大类:
①创建型模式,共5种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式;
②结构型模式,共7种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式;
③行为型模式,共11种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。
两种模式区别如下:
工厂模式是定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂模式使其创建过程延迟到子类进行;
抽象工厂模式是为创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类。
通俗的可以理解为:工厂模式针对的是一个产品等级结构,抽象工厂模式针对的是面向多个产品等级结构的。它们的详细区别可以参照博客链接其中的第18题,解析的比较清楚。
其他模式参考链接和的说明,这里不作过多的解释。
2.请说说什么是重载,以及什么是重写?并比较两者之间的区别。
重载(Overload):首先是位于一个类之中或者其子类中,具有相同的方法名,但是方法的参数不同,返回值类型可以相同也可以不同。其特征有:
(1):方法名必须相同;
(2):方法的参数列表一定不一样;
(3):访问修饰符和返回值类型可以相同也可以不同。
重写(override):一般都是表示子类和父类之间的关系,其主要的特征是:方法名相同,参数相同,但是具体的实现不同。其特征有:
(1):方法名和返回值类型必须相同;
(2):参数列表必须相同;
(3):访问权限不能比父类中被重写的方法的访问权限更低。例如:如果父类的一个方法被声明为public,那么在子类中重写该方法就不能声明为protected;
(4):子类和父类在同一个包中,那么子类可以重写父类所有方法,除了声明为private和final的方法;
(5):构造方法不能被重写。
具体区别可参考链接。
3.JDK和JRE有什么区别?
JDK:Java Development Kit的简称,Java开发工具包,提供了Java的开发环境和运行环境;
JRE:Java Runtime Environment的简称,Java运行环境,为Java运行提供了所需的环境;
JDK包含了JRE,简单来说就是:运行Java程序时,只需安装JRE;编写Java程序时,需要安装JDK。
4.抽象类必须要有抽象方法吗?
不一定,抽象类不一定非要有抽象方法;但包含一个抽象方法的一定是抽象类。
例如定义如下一个抽象类,代码如下:
abstract class Cat {
public static void sayHi() {
System. out. println("hi~");
}
}
以上代码表明,抽象类没有抽象方法也能够运行。
5.ArrayList和Vector的区别是什么?
线程安全:Vector使用了synchronized来实现线程同步,是线程安全的;而ArrayList是线程不安全的;
扩容:ArrayList和Vector都会根据实际需要动态的调整容量,Vector每次扩容增加一倍,ArrayList只会增加50%。
好了,本期博客就到这里了,我们下期再见!