答案是:不必须。
这个题目主要是考察对抽象类的理解。
说一下我个人的理解吧。
1.如果一个类使用了abstract关键字修饰,那么这个类就是一个抽象类。
2.抽象类可以没有抽象方法
3.一个类如果包含抽象方法,那么这个类必须是抽象类,否则编译就会报错。
4.最关键的一点就是如果一个类是抽象类,那么这个类是不能被实例化的。
如下:
public abstract class MQTest { }
现在user这个类就是一个抽象类,如果直接 使用该类创建新对象是行不通的,编译直接报错。
抽象类只能用其子类(该子类不能是抽象类)去创建新对象。
接下来我就用狗的例子来说明,先创建一个动物类(抽象类),然后创建一个狗类(抽象类),狗下面再分为金毛和二哈(非抽象类)。
动物类:
package com.xingli.abstractDemo; import lombok.Data; /** *@ClassName Animal *@Description 动物抽象类 *@Auther William *@Date 2019/7/22 14:11 *@Version 1.0 */ @Data public abstract class Animal { //定义一个抽象的“让动物叫”的方法 public abstract void say(); }
狗类:
package com.xingli.abstractDemo; /** *@ClassName Dog *@Description 狗类的抽象方法 *@Auther William *@Date 2019/7/22 14:13 *@Version 1.0 */ public abstract class Dog extends Animal{ //默认继承父类的say方法 }
金毛:
package com.xingli.abstractDemo; /** *@ClassName JINMAODog *@Description 金毛 *@Auther William *@Date 2019/7/22 14:16 *@Version 1.0 */ public class JINMAODog extends Dog{ //实现父类的抽象方法 @Override public void say() { System.out.println("金毛:我的名字叫金毛"); } }
二哈:
package com.xingli.abstractDemo; /** *@ClassName ERHADog *@Description 二哈 *@Auther William *@Date 2019/7/22 14:21 *@Version 1.0 */ public class ERHADog extends Dog{ @Override public void say() { System.out.println("二哈:我的名字叫二哈"); } }
直接父类创建新对象:结果报错
使用动物子类创建新对象,因为狗类也是抽象接口所以也报错
使用非抽象子类创建新对象(正确)
public class Test { public static void main(String[] args) { Animal erhaDog = new ERHADog(); Animal jinmaoDog = new JINMAODog(); erhaDog.say(); jinmaoDog.say(); } }
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之家整理,本文链接:https://www.bmabk.com/index.php/post/97066.html