接口可以实例化吗
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了接口可以实例化吗相关的知识,希望对你有一定的参考价值。
Shape是一个接口 Shape[] a=new Shape();这么做是可以的吗
各位江湖高手 挑战一下清华大学的教材吧
Shape shape = new Shapes();
其中Shapes()是接口实现类 参考技术A 本人在学习阶段遇到此问题,具体在PureMVC的学习中,此框架中在最高级父类中声明了一个静态变量叫做 instance:IFacade ,其中 IFacade 为一个接口,并且有一个类(MyAppFacade类)实现了接口 IFacade ,按道理说 instance 不可能被实例化,因为申明的类型为接口,但是在后期的时候,这个 instance 变量被实例化为一个实现了此接口(IFacade)的实体类(MyAppFacade),也就是
instance = new MyAppFacade(),其中MyAppFacade implements IFacade
以此得出,接口不能被直接new出来,因为其没有构造方法,但是能被实例化为一个实现此接口的类(个人理解);
睿联Web后端面经
睿联Web后端面经
一、子网掩码和Mac地址有什么作用?
子网掩码是一种用来指明一个IP地址的哪些位标识的是主机所在的子网,以及哪些位标识的是主机的位掩码。
MAC介质访问控制地址,或称为物理地址,也叫硬件地址,MAC地址用于在网络中唯一标示一个网卡,一台设备若有一或多个网卡,则每个网卡都需要并会有一个唯一的MAC地址。
二、主键索引和唯一索引的区别?哪个快?
唯一索引
- 唯一索引不允许两行具有相同的索引值。
- 如果现有数据中存在重复的键值,则大多数数据库都不允许将新创建的唯一索引与表一起保存。当新数据将使表中的键值重复时,数据库也拒绝接受此数据。例如,如果在 employee 表中的职员姓氏(lname) 列上创建了唯一索引,则所有职员不能同姓。
主键索引
- 主键索引是唯一索引的特殊类型。
- 数据库表通常有一列或列组合,其值用来唯一标识表中的每一行。该列称为表的主键。
- 在数据库关系图中为表定义一个主键将自动创建主键索引,主键索引是唯一索引的特殊类型。主键索引要求主键中的每个值是唯一的。当在查询中使用主键索引时,它还允许快速访问数据。
区别:
- 对于主键大多数都会自动建立唯一索引;
- 主键不一定只包含一个字段,所以如果你在主键的其中一个字段建唯一索引还是必要的;
- 主健可作外健,唯一索引不可;
- 主健不可为空,唯一索引可;
- 主健也可是多个字段的组合;
- 主键与唯一索引不同的是:
a.有not null属性;
b.每个表只能有一个。
三、简单工厂模式和抽象工厂模式的区别?
- 简单工厂模式的思路是,首先我们把一些共性的东西(算法)拿出来,进行抽象,比如加减乘除。然后我们在定义一个类作为工厂类,工厂类的作用就是根据传过来的字符串或者其他Key值给返回一个相对应的算法的实体。
- 抽象工厂模式提供一个创建一系列相关或者相互依赖对象的接口,而无需指定它们具体的类。
- 简单工厂实现简单,扩展也很容易,但是不满足OCP,不满足OCP的代价就是难维护,在维护的时候容易引发新的BUG。
- 抽象工厂则是继续把产品进行再次抽象,最后得到一个可以支持产品切换的结构,但问题是太重了,过于复杂,不过还好,很多支持反射的语言,我们可以直接通过反射技术来优化这个“过重”的缺点。
四、索引失效的条件?
- 如果条件中有 or,即使其中有部分条件是索引字段,也不会使用索引
- 复合索引,查询条件不使用索引前面的字段,后续字段也将无法使用索引
- 以 % 开头的 like 查询
- 索引列的数据类型存在隐形转换
- where 子句里对索引列有数学运算
- where 子句里对索引列使用函数
- MySQL 引擎估算使用全表扫描要比使用索引快,则不使用索引
五、抽象类和接口的区别?空的抽象类可以实例化吗?
相同点:
① 抽象类和接口都不能被实例化
② 抽象类和接口都可以定义抽象方法,子类/实现类必须覆写这些抽象方法
不同点:
① 抽象类有构造方法,接口没有构造方法
② 抽象类可以包含普通方法,接口中只能是public abstract修饰抽象方法(Java8之后可以)
③ 抽象类只能单继承,接口可以多继承
④ 抽象类可以定义各种类型的成员变量,接口中只能是public static final修饰的静态常量
六、控制反转和依赖注入的关系?
IoC(Inversion of Control)控制反转:可以理解为,由Spring容器去管理所有bean对象的生命周期和它们之间的关系。在项目中我们可以在bean.xml配置文件中或者是注解中配置需要管理的类,Spring容器就会去识别这些bean对象是什么,bean之间的关系是什么,然后在项目启动到某个时候,Spring容器将主动把对象A要的东西传递给A,同时也将A传递给需要A的其他对象。而这些bean对象的创建与消亡都是由Spring容器控制,也就是对象的生命周期不在是引用它的对象控制。
DI(Dependency Injection)依赖注入:依赖注入可以说是IoC的一个重点。在项目运行时,IoC容器会动态将bean对象传递给所需要它的其他对象,其中是通过依赖注入来实现的。
七、引用传递和值传递的区别
值传递传递的是真实内容的一个副本,对副本的操作不影响原内容,也就是形参怎么变化,不会影响实参对应的内容。
引用传递,在Java中并不存在。
在Java中所有的参数传递,不管基本类型还是引用类型,都是值传递,或者说是副本传递。
只是在传递过程中:
如果是对基本数据类型的数据进行操作,由于原始内容和副本都是存储实际值,并且是在不同的栈区,因此形参的操作,不影响原始内容。
如果是对引用类型的数据进行操作,分两种情况,
一种是形参和实参保持指向同一个对象地址,则形参的操作,会影响实参指向的对象的内容。
一种是形参被改动指向新的对象地址(如重新赋值引用),则形参的操作,不会影响实参指向的对象的内容。
以上是关于接口可以实例化吗的主要内容,如果未能解决你的问题,请参考以下文章