A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 一个人旅行 中级黑马   /  2013-12-14 17:03  /  1196 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

抽象类中abstract 关键字,和哪些关键字不能共存,为什么?

评分

参与人数 1黑马币 +3 收起 理由
乔兵 + 3

查看全部评分

6 个回复

倒序浏览
abstract不能和哪些关键字共存。
        final:final表示终结的,而abstract修饰的必须要继承,实现它的方法。
        private:private表示私有的,私有了子类怎么重写,实现它的方法呢。
        static:静态的,静态的不用创建对象直接通过类名调用即可,而调用抽象的方法是没有意义的

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
抢答无力...
回复 使用道具 举报
litaojisuanji 发表于 2013-12-14 17:09
abstract不能和哪些关键字共存。
        final:final表示终结的,而abstract修饰的必须要继承,实现它的方法。
         ...

谢谢了。记得了
回复 使用道具 举报

客气了,大家一起学习。
回复 使用道具 举报
private:
私有内容子类继承不到,所以,不能重写。
但是,abstract修饰的方法,要求被重写。两者冲突。
final
final修饰的方法不能被重写。
而abstract修饰的方法,要求被重写。两者冲突。                        
static
假如一个抽象方法能通过static修饰,那么这个方法,就可以直接通过类名调用。
而抽象方法是没有方法体的,这样的调用无意义。所以,不能用static修饰。

评分

参与人数 1技术分 +1 收起 理由
简★零度 + 1

查看全部评分

回复 使用道具 举报 1 0
下面我们一起了解什么是抽象类,首先我来解释下抽象这两个字的意思。
抽象:笼统、模糊、看不懂、不具体等意思
那抽象类有些什么特点呢?
①方法只有声明没有实现时,该方法就是抽象方法,需要被abstract关键字修饰,抽象方法必须定义在抽象类中,该类也必须被abstract关键字修饰。
②抽象类不可以被实例化,因为调用抽象方法没意义。
③抽象类必须有其子类覆盖了所有的抽象方法后,该子类才可以实例化,否则,这个子类还是抽象类。


既然我们前面说到抽象类不能被实例化。那么抽象类有构造函数么?答案是有的,这又是为什么呢?因为抽象类是必须被继承的,
而抽象类的构造函数就是用来给子类对象进行初始化。


还有就是抽象类可以不定义抽象方法吗?可以的,但是这种抽象类是很少见的,目的就是不让该类创建对象,
但是AWT的适配器对象就是这种抽象类,通常这种类中的方法有方法体,但是方法中没有内容。
abstract class Dome{
void show(){}
}



根据抽象类的这些特点,那么我们来说说抽象abstract关键字不可以和哪些关键字共存呢?
我们已经知道了,抽象类是必须被其他类继承的,类中的抽象方法也是必须被子类重写。
①那么abstract关键字和private关键字是不能共存的,因为抽象方法是要被子类中的方法覆盖重写,如果用private关键字修饰,而私有化后方法是不能被访问到的。
②还有就是static关键字也不能和abstract关键字共存,因为用static关键字修饰后的方法,就是静态方法
  不用创建对象,可以直接用类名调用方法,而调用抽象方法就毫无意义了。
③abstract关键字和const、readonly关键字也不能在一起使用,因为被const和readonly关键字修饰的方法不能被覆盖,而抽象方法就是要被其子类中的方法覆盖。


前面我们讲了那么多,那么抽象类和我们平时见的那些一般类有什么异同点呢?
相同点:抽象类和一般类都是用来描述事物的,都在内部定义了成员。
不同点:①一般类有足够的信息描述事物,而抽象类描述事物的信息就有可能不足,
           ②一般类中不能定义抽象方法,只能定义非抽象方法,而抽象类中可以定义抽象方法,同时也可以定义非抽象方法。
           ③一般类可以被实例化,抽象类不可以被实例化。

评分

参与人数 1技术分 +1 收起 理由
简★零度 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马