面试题抽象类和接口

抽象类

在面向对象的概念中,所有的对象都是通过类来描述的,但不是所有类都是用来描述对象的。如果一个类中没有足够的信息来描述一个具体的对象这样的类就是抽象类;

 

1、抽象类必须有abstract修饰符来修饰,抽象方法也必须使用abstract修饰符来修饰,抽象方法不能有方法体。

2、抽象类不能被实例化,无法使用new关键词来调用抽象类中的构造方法来创建抽象类的实例。即使抽象类中不含有抽象方法,这个抽象类不能创建实例。

3、抽象类中可以包含属性、方法(普通方法和抽象方法)构造方法,初始化块,内部类、枚举类六种成分。抽象类不能创建实例主要是由子类中调用。

4、含有抽象方法的类(包括直接定义一个抽象方法;继承了一个抽象的父类,但是没有完全实现父类包含的抽象方法,以及实现了一个接口,但没有完全实现接口包含的抽象方法三种情况)

只能被定义为抽象类。

即抽象方法一定在抽象类中,抽象类中可以没有抽象方法。

需要值得注意的

* 当用abstract修饰类时,表名这个类只能被继承,当abstract修饰方法,表明这个方法只能被子类中重写。而finall修饰的类不能被继承,finall修饰的方法不能被重写。因此abstract和finall不能同时使用。

* abstract不能用来修饰属性不能用于修饰局部变量,即没有抽象变量,没有抽象属性等说法。

* abstract不能修饰构造方法,没有抽象的构造方法,抽象类中定义的构造方法只能是不同的构造方法。

* 当时static来修饰一个方法是,表明这个方法属于当前类,即该方法可以通过类的名字来调用,如果该方法被定义成成抽象方法,即将导致通过类名调用一个没有方法体方法是出现错误,(即当调用没有方法体的方法时肯定会报错误)abstract和static 不能同时修饰某个方法,即没有抽象类方法。

* abstract关键词修饰的方法必须被其子类重写才有意义,否者这个方法永远没有方法体,因此abstract方法不能定义为private访问权限,即private和abstract不能同时使用。

接口

在java中类与类之间只能单继承而不能多继承。多继承岁演能使子类中同时拥有多个父类的特点但是缺点也是很显著的,主要有两个方面;1、如果一个子类继承多个父类中拥有相同的名字的变量,子类在引用该变量时将产生歧义,无法判断应该是那个父类的变量。另一方面如果在子类继承的多个父类中有相同的方法,子类中没有覆盖该方法。那么在调用该方法是将产生歧义,无法半段是那个父类中的方法。所以java中禁止一个类继承多个父类但是多继承也有它的有点,因此java通过接口的功能获得多继承许多优点又摒弃了多继承的缺点。

1、修饰符可以是public,这时的接口可以被任何的其它接口或类访问;修饰符也可以是缺省的这是接口只能被同一个包中的其他接口和类访问。

2、接口的名字可以使任意有效的标识符

3、接口中的成员变量都是共有的、静态的、最终的常量

4、接口中的方法都是共有的,抽象的方法,引诱方法的签名,没有方法的主体;

5、接口可以继承通过extends关键词描述继承关系,子接口可以继承接口的属性和方法,java接口与类的继承不同,接口支持多继承,多个父接口之间用,分隔。

6、抽象类中可以有实例变量,而接口中不能拥有实例变量,接口中的变量都是静态的常量(static)和(finall)。

7、抽象类中可以有非抽象方法而接口中只能有抽象方法

8、抽象类只支持单继承,接口支持多继承。

注:

1、在接口中只能定义常量,因此系统会自动为这些属性增加static和finall两个修饰符。而且接口里没有构造方法和初始化块;因此在接口定义常量时必须指定默认值。

2、在接口中只能定义抽象方法,因此系统自动会为其增加abstract修饰符;由于接口里的方法全部是抽象方法,因此接口里不允许定义静态方法。即不可使用static修饰接口中的方法。不管接口中方法时是否使用public abstract修饰符,接口中的方法总是使用public abstract 修饰符、

 

相同点

1、接口和抽象类都不能被实例化,他们都位于继承树的顶端,用于被其他类实现和继承。

2、接口和抽象类中都可以包含抽象方法,实现接口或继承抽象类的不同子类都必须实现这些抽象方法。

 

不同点

1、接口中只能有抽象的方法,不包含已经提供实现的方法;抽象类中则完全可以包含普通的方法。

2、接口里不能定义静态的方法,抽象类中可以定义静态的方法。

3、接口里只能定义静态的常量属性,不能定义普通的属性;抽象类里则既可以定义普通的属性,也可以定义静态的常量属性。

4、接口中不包含构造方法;抽象类里可以包含构造方法但不是用来创建对象,而是让其子类调用这些构造方法完成属于抽象类的初始化操作。

5、接口不能包含初始化块,而抽象类中可以包含初始化块;

6、一个类只能有一个父类包括抽象类,但是一个类可以直接实现多个接口,通过实现多个接口可以拟补java中单继承的不足。

 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值