抽象类必须要有抽象方法吗?

答案是:不必须。

这个题目主要是考察对抽象类的理解。

说一下我个人的理解吧。

1.如果一个类使用了abstract关键字修饰,那么这个类就是一个抽象类。

2.抽象类可以没有抽象方法

3.一个类如果包含抽象方法,那么这个类必须是抽象类,否则编译就会报错。

4.最关键的一点就是如果一个类是抽象类,那么这个类是不能被实例化的。

  如下:     

public abstract class  MQTest {
    
}

 现在user这个类就是一个抽象类,如果直接 使用该类创建新对象是行不通的,编译直接报错。

抽象类必须要有抽象方法吗?_第1张图片

抽象类只能用其子类(该子类不能是抽象类)去创建新对象。

接下来我就用狗的例子来说明,先创建一个动物类(抽象类),然后创建一个狗类(抽象类),狗下面再分为金毛和二哈(非抽象类)。

动物类:

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("二哈:我的名字叫二哈");
    }
}

直接父类创建新对象:结果报错

抽象类必须要有抽象方法吗?_第2张图片

使用动物子类创建新对象,因为狗类也是抽象接口所以也报错

抽象类必须要有抽象方法吗?_第3张图片

使用非抽象子类创建新对象(正确)

public class Test {
    public static void main(String[] args) {
        Animal erhaDog = new ERHADog();
        Animal jinmaoDog = new JINMAODog();
        erhaDog.say();
        jinmaoDog.say();
    }
}

抽象类必须要有抽象方法吗?_第4张图片

 

你可能感兴趣的:(java基础知识,抽象类必须要有抽象方法吗?,Java面试题,面试题,抽象类,抽象方法)