接口和抽象类

接口和抽象类

下面字段声明中哪一个在interface主体内是合法的? ()

正确答案: B 你的答案: C (错误)

A. private final static int answer = 42;
B. public static int answer = 42;
C. final static answer = 42;
D. int answer;

在接口中,属性都是默认public static final修饰的,所以:

​ A(错误):不能用private修饰;

​ B(正确):在接口中,属性默认public static final,这三个关键字可以省略;

​ C(错误):没写属性的类型;

​ D(错误):final修饰的属性必须赋值;( final修饰的属性不能说必须赋值,后面可以要么静态块里赋 要么构造器里赋值 ; 确实如此,但是在接口中没有静态块和构造器,接口中的属性是必须直接赋值的 )

接口中的属性在不提供修饰符修饰的情况下,会自动加上public static final

注意(在1.8的编译器下可试):

(1)属性不能用private,protected,default 修饰,因为默认是public

(2)如果属性是基本数据类型,需要赋初始值,若是引用类型,也需要初始化,因为默认有final修饰,必须赋初始值;

(3)接口中常规的来说不能够定义方法体,所以无法通过get和set方法获取属性值,所以属性不属于对象,属于类(接口),因为默认使用static修饰 (接口中不可以定义方法?可以定义方法,但是不可以定义方法体,JDK1.8中为了加强接口的能力,接口可以存在具体的方法,前提是方法需要被default或者static关键字修饰.)

jdk1.8之前

接口

1.多实现

2.变量类型默认且只能为为public static final

3.函数类型默认且只能为public,只能有public类型的静态成员函数

4.非静态成员函数没有方法体(public abstract),静态成员函数有方法体

5.子类必须实现所有接口函数

6.可以有main方法;可以new一个接口,需要在方法体中实现所有接口函数

7.没有构造器

抽象类

1.单继承

2.变量类型不限(静态变量+非静态变量)

3.函数类型不限(静态函数+非静态函数)

4.非静态函数包含没有方法体的抽象函数. 有方法体的普通函数

5.子类可以不覆写父类的抽象方法,但子类也要申明为抽象类;子类可以选择覆写父类的非抽象方法

6.可以有main方法;不可以new一个抽象类

7.可以有构造器

Jdk1.8

接口中可以有default类型的方法,实现类可以选择实现该方法

意义:默认方法的主要优势是提供一种拓展接口的方法,而不破坏现有代码。另一个优势为该方法是可选的,子类可以根据不同的需求Override或默认实现。

抽象类

下面哪些情况下需要使用抽象类?

正确答案: A B D 你的答案: A B D (正确)

当一个类的一个或多个方法是抽象方法时
当类是一个抽象类的子类,并且不能为任何抽象方法提供任何实现细节或方法体时
当一个类实现多个接口时
当一个类实现一个接口,并且不能为任何抽象方法提供实现细节或方法体时

A项 一个类中有抽象方法则必须申明为抽象类

B项 抽象类中的抽象方法必须由其子类实现,若子类不能实现则子类也必须定义为抽象类

D项 一个类实现一个接口就必须实现其中所有的抽象方法,若该实现类不能实现接口中的所有方法则实现类定义为抽象类

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值