抽象类必须要有抽象方法吗?
答案是:不必须。
这个题目主要是考察对抽象类的理解。
说一下我个人的理解吧。
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();
}
}
上一篇:
IDEA上Java项目控制台中文乱码
