java面试题38 以下关于 abstract 关键字的说法,正确的是()

java面试题38 以下关于 abstract 关键字的说法,正确的是()

A abstract 可以与final 并列修饰同一个类。
B abstract 类中不可以有private的成员。
C abstract 类中必须全部是abstract方法。
D abstract 方法必须在abstract类或接口中。

蒙蔽树上蒙蔽果,蒙蔽树下你和我。

 抽象一直以来都是人们所神往的艺术形式,这点从梵高,毕加索等艺术家的身上就可以看出。抽象所代表的是一种形式上的美感,颇有一种虚无缥缈只可意会不可言传的意味。但是JAVA中的抽象类与抽象方法相对而言就更加直接了,它给我的感觉更像是文章的副标题,本身不发挥什么作用,但是却可以从中展开许多功能。

  用关键字abstract修饰的类称为abstract类(抽象类),比如:

abstract classA{

}

用关键字abstract修饰的方法称为abstract方法(抽象方法),例如:

abstract int min (int x,int y);

  对于abstract方法只允许声明,不允许实现(因为没有方法体)(毕竟叫抽象,当然不能实实在在的让你实现),并且不允许使用final和abstract同时修饰一个方法或者类,也不允许使用static修饰abstract方法。也就是说,abstract方法只能是实例方法,不能是类方法。

      既然abstract类和方法这么特殊,我们就必须对比一下它和普通类与方法之间的区别了:

1.abstract类中可以有abstract方法

 abstract类中可以有abstract方法,也可以有非abstract方法

 非abstract类中不可以有abstract方法

2.abstract类不能使用new运算符创建对象

但是如果一个非抽象类是抽象类的子类,这时候我们想要创建该对象呢,这时候它就必须要重写父类的抽象方法,并且给出方法体,这也就是说明了为什么不允许使用final和abstract同时修饰一个类或者方法的原因。

重点常考!:final和abstract,private和abstract,static和abstract,这些是不能放在一起的修饰符,因为abstract修饰的方法是必须在其子类中实现(覆盖),才能以多态方式调用,以上修饰符在修饰方法时期子类都覆盖不了这个方法,final是不可以覆盖,private是不能够继承到子类,所以也就不能覆盖,static是可以覆盖的,但是在调用时会调用编译时类型的方法,因为调用的是父类的方法,而父类的方法又是抽象的方法,又不能够调用,所以上的修饰符不能放在一起。

3.abstract类的子类

如果一个非abstract类是abstract类的子类,它必须重写父类的abstract方法,也就是去掉abstract方法的abstract修饰,并给出方法体。

如果一个abstract类是abstract类的子类,它可以重写父类的abstract方法,也可以继承父类的abstract方法。

下面举个例子:

abstract class GirlFriend{                                //抽象类,封装了两个行为标准

abstract void speak();

abstract void cooking();

}
class ChinaGirlFriend extends GirlFriend{

void speak(){

System.out.println("你好");

}

void cooking(){

System.out.println("水煮鱼");

}

}
class AmercanGirlFriend extends GirlFriend{

void speak(){

System.out.println("hello");

}

void cooking(){

System.out.println("roast beef");

}

}
class boy{

GirlFriend friend;

void setGirlFriend(GirlFriend f){

friend=f;

}

void showGirlFriend(){

friend.speaking();

friend.cooking();

}

}
public class text{

public static void main(String args[]){

GirlFriend girl =new ChineseGirlFriend();      //这里girl是上转型对象

Boy boy=new boy();

boy.setGirlFriend(girl);

boy.showGirlFriend();

girl=new AmericanGirlFriend();             //girl 是上转型对象

boy.setGirlFriend(girl);

boy.showGirlFriend();

}

}

1abstract类不能与final,static使用。final修饰方法,子类可以调用,但不能覆盖。

2最好不要有private因为私有和抽象放在一起,子类如果想重写父类的私有方法根本继承不过来,也就无法重写

3抽象类中可以有非抽象方法

4抽象类中可以都是非抽象的,但是抽象方法一定要在类和接口中

答案为D

我是歌谣,有什么不合理之处欢迎指出。来,一起刷题走起来

阅读目录(置顶)(长期更新计算机领域知识)

阅读目录(置顶)(长期更新计算机领域知识)

阅读目录(置顶)(长期科技领域知识)

歌谣带你看java面试题

    原文作者:普通网友
    原文地址: https://blog.csdn.net/weixin_43392489/article/details/103312645
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞