首页 > 试题广场 >

下面哪些情况下该类一定为抽象类?

[不定项选择题]
下面哪些情况下该类一定为抽象类?
  • 当一个类的一个或多个方法是抽象方法时
  • 当类是一个抽象类的子类,并且不能为任何抽象方法提供任何实现细节或方法体时
  • 当一个类实现多个接口时
  • 当一个类实现一个接口,并且不能为任何抽象方法提供实现细节或方法体时
1.A选项。一个类中有抽象方法则必须申明为抽象类。
public abstract class HaveAbstractMethod {
public abstract void method1();}
2.B选项。 我建一个接口,然后一个抽象类implements这个接口,并override的所有方法。然后我在建一个类extends这个抽象类,并且不能为任何抽象方法提供任何细节或方法体时,这时这个类必须是抽象类。
public interface MyInterface { public void method1();}
public abstract class MyAbstractClass implements MyInterface{
@Override
public void method1() {   } }
public abstract class ChildAbstractClass extends MyAbstractClass{
@Override
public abstract void method1();
}
3.D选项。我建一个接口,然后一个类implements这个接口,并且不能为任何抽象方法提供任何细节或方法体时,这个类必须是抽象类,并override的所有方法。然后我在建一个普通类extends这个抽象类,就可以为所欲为了 。这种情况就是java设计模式中的适配器模式。
public interface MyInterface { public void method1();}
public abstract class MyAbstractClass implements MyInterface{
@Override
public void method1() {   } }
public class MyNormalClass extends MyAbstractClass{
@Override
public void method1() {System.out.println("from method1");}
发表于 2016-04-05 21:58:14 回复(13)
A项 一个类中有抽象方法则必须申明为抽象类
B项 抽象类中的抽象方法必须由其子类实现,若子类不能实现则子类也必须定义为抽象类
D项 一个类实现一个接口就必须实现其中所有的抽象方法,若该实现类不能实现接口中的所有方法则实现类定义为抽象类
发表于 2017-01-24 00:18:51 回复(4)
lz头像 lz
抽象类:用abstract修饰,抽象类中可以没有抽象方法,但抽象方法肯定在抽象类中,且抽象方法定义时不能有方法体;抽象类不可以实例化只能通过继承在子类中实现其所有的抽象方法;抽象类如果不被继承就没有任何意义;抽象类为子类定义了一个公共类型,封装了子类中的重复内容。
接口:同Interface关键字定义接口,是特殊的抽象类因为类中只包含抽象方法;接口中不能定义成员变量可以定义常量;接口是其通过其他类使用implements关键字定义实现类,一个类一旦实现接口就必须实现其中的所有抽象方法,一个类可以实现多个接口,接口名之间用逗号隔开即可;一个接口可以通过extends关键字继承另一个接口,与此同时继承了父类中的所有方法。

发表于 2015-06-28 13:29:13 回复(3)
抽象方法的题是很容易做错,所以它是感染性极强的病毒(Abs病毒)。

A:当一个类有一个抽象方法,就表示它被Abs病毒感染了,所以整个类就被感染了(这个类必须是abstract的)。--  一个类有一个抽象方法或多个抽象方法就必须是abstract的

B:如果一个类继承了一个抽象类,则必须实现它所有的方法(解析Abs病毒所有DNA,制定对策),如果有一个抽象方法没实现,就是表示某个病毒体没被破解成功,这个子类同样会被Abs病毒感染,必须标志abstract。-- 当类是一个抽象类的子类,必须所有抽象方法被实现,有一个抽象方法没实现,子类就是abstract的。

C:普通类本来就可以实现多个接口,接口可以多实现,但是类不能多继承,除了接口本身可以多继承接口,接口也不能被多继承,抽象类也不可以!!

D:一个类实现一个接口,要知道接口就是抽象类的更抽象的一种东西,所以其变量都是public abstract static final的,方法都是public abstract static的(jdk1.8以后有非抽象方法了,default和static方法。。略坑),这就是为什么接口里只能定义接口而不能实现的原因了!

编辑于 2019-07-25 10:43:41 回复(0)
答案为ABD,首先看A项,但一个类中只要有一个方法是抽象的则类必须为抽象类,B项,抽象类的定义就是给出方法的定义但又不提供任何抽象方法的任何实现细节,C项,当类实现多个接口时且给出了实现细节则不是抽象类,D项符合抽象类定义。
编辑于 2015-07-23 10:43:25 回复(4)
抽象类中可以没有抽象方法,但是只要有抽象方法就必须是抽象方法。
发表于 2017-01-12 15:35:46 回复(1)
抽象类:1、用 abstract 修饰,抽象类中可以没有抽象方法,但抽象方法肯定在抽象类中,且抽象方法定义时不能有方法体;2、抽象类不可以实例化只能通过继承在子类中实现其所有的抽象方法;3、抽象类如果不被继承就没有任何意义;4、抽象类为子类定义了一个公共类型,封装了子类中的重复内容。

接口:1、同Interface关键字定义接口,是特殊的抽象类因为类中只包含抽象方法;2、接口中不能定义成员变量可以定义常量;3、 接口是其通过其他类使用 implements 关键字定义实现类,一个类一旦实现接口就必须实现其中的所有抽象方法,一个类可以实现多个接口,接口名之间用逗号隔开即可;4、一个接口可以通过 extends 关键字继承另一个接口,与此同时继承了父类中的所有方法。
发表于 2017-02-23 11:00:27 回复(0)
B和D感觉不对。 B:如果该抽象类里没有任何抽象方法呢。 D:接口同B。
发表于 2022-02-11 22:37:56 回复(1)

抽象类:
1、用 abstract 修饰,抽象类中可以没有抽象方法,但抽象方法肯定在抽象类中,且抽象方法定义时不能有方法体;
2、抽象类不可以实例化只能通过继承在子类中实现其所有的抽象方法;
3、抽象类如果不被继承就没有任何意义;
4、抽象类为子类定义了一个公共类型,封装了子类中的重复内容。

接口:
1、用Interface关键字定义接口,是特殊的抽象类,因为类中只包含抽象方法;
2、接口中不能定义成员变量可以定义常量;
3、 接口是其通过其他类使用 implements 关键字定义实现类,一个类一旦实现接口就必须实现其中的所有抽象方法,一个类可以实现多个接口,接口名之间用逗号隔开即可;
4、一个接口可以通过 extends 关键字继承另一个接口,与此同时继承了父类中的所有方法。

发表于 2020-10-19 13:18:57 回复(0)
1、当一个类包含一个或多个抽象方法,该类必须被限定为抽象的(否则编译器会报错)
2、一个没有任何抽象方法的类也可以是抽象类(当想阻止产生这个类的对象时,可以设置为抽象类)
3、从抽象类继承的类,可能是抽象类,也可能不是。若不是,则必须为基类中的所有抽象方法提供方法定义,且可以创建该新类的对象。如果不为基类中所有抽象方法提供方法定义,那么导出类也是抽象类·

参考资料《java编程思想》P169
编辑于 2017-11-28 12:00:48 回复(0)
D应该是错的吧,如果这个类是接口呢。接口实现接口,而不用重写方法。
发表于 2017-11-01 00:15:03 回复(1)
A:抽象类可以一个或多个方法是抽象方法,而接口必须全都是抽象方法
发表于 2022-04-11 11:14:09 回复(0)
发表于 2022-03-08 10:18:00 回复(0)
根据上面来进行判断
A.参考2:只要包含抽象方法一定是抽象类
B.参考5:不能提供实现细节和方法体自身也需要是抽象类
C.普通的类也可以实现多个接口
D.参考5:不能提供实现细节和方法体自身也需要是抽象类
发表于 2019-09-27 14:44:32 回复(0)
注意,B和D,不管一个类继承还是实现,如果该类未提供实现细节或方法体时,该类为抽象类。
发表于 2019-06-04 16:31:23 回复(0)
我觉得选A
因为抽象类和接口都不一定有抽象方法,这样他们的子类并没有为任何抽象方法提供实现细节或方法体,但是并不一定是抽象类
发表于 2018-11-23 21:21:35 回复(0)
又一道被看不懂题干的试题,我觉得它的题干这么问比较好“哪些是且只能是抽象类”
我理解成这些选项哪些会用到抽象类呢,没想过他们本身是不是抽象类的问题
发表于 2018-01-21 13:32:37 回复(0)

BD如果表述为: 不能为全部的抽象方法提供任何实现细节或方法体时,就好理解了。
此处举一个选项的例子:

package com.learn.pra10;
/**
 * 接口,含有2个抽象方法。
 * @author mengyi
 *
 */
public interface Test {
    void speak();
    void print();
}

package com.learn.pra10;
/**
 * Demo1实现接口Test,但是这里只实现了speak方法,
 * 并没有实现print方法,所以此类必须声明为抽象类,要不编译器报错。
 * @author mengyi
 *
 */
public abstract class Demo1 implements Test {
    public void speak(){
        System.out.println("speak方法已实现");
    }
}
发表于 2017-07-09 17:50:29 回复(0)
接口默认是用public abstract修饰的,且只能用这两个修饰符修饰
发表于 2017-02-16 11:16:00 回复(0)
当一个类实现一个接口,并且不能为任何抽象方法提供实现细节或方法体时
可以使用接口或者抽象类去继承接口

发表于 2016-03-21 21:53:12 回复(0)