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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 樊玲 中级黑马   /  2013-3-13 13:24  /  2210 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 樊玲 于 2013-3-13 16:11 编辑

抽象类可不可以继承实体类呢?都有什么需要注意的地方。。。

评分

参与人数 1技术分 +1 收起 理由
洪建超 + 1

查看全部评分

8 个回复

倒序浏览
可以继承。其实从Object就是个实体类,java的API文档里,每个抽象类的条目里都明确写着直接或间接继承自Object类!
class A{}

abstract class B extends A{}


结果完全正常,编译通过。
回复 使用道具 举报
在编程语句中用 abstract 修饰的类是抽象类。在java中,含有抽象方法的类称为抽象类,同样不能生成对象,同时抽象类是不完整的,并且它只能用作基类。
它与非抽象类的不同在于抽象类不能直接实例化,允许(但不要求)抽象类包含抽象成员。
回复 使用道具 举报
抽象类和抽象方法原则:

(1)抽象类必须使用abstract修饰符修饰,抽象方法必须使用abstract修饰符修饰,抽象方法不能有方法体。

(2)抽象类不能被实例化,即使抽象类中不包含抽象方法,同样也不能创建实例。

(3)抽象类可以包含属性,方法(普通方法和抽象方法都可以),构造器,初始化块,内部类,枚举类六种成分。抽象类的构造器不能用于创建实例,主要是用于被子类调用。

(4)含有抽象方法的类,只能被定义为抽象类。

注意:

(1)抽象方法和空方法体的方法是不同概念,例如public abstract void test();是一个抽象方法,它根本没有方法体,方法后面没有大括号,但public void test(){}方法是一个普通的方法,他已经定义了方法体,只是方法体是空,因此该方法不能用abstract修饰。

(2)abstract不能用于修饰属性,不能用于修饰局部变量,即使没有抽象变量,没有抽象属性等说法;abstract也不能修饰构造器,没有抽象构造器。抽象类中定义的构造器只能是普通的构造器。

(3)当使用static修饰一个方法时,该方法属于类,如果该方法被定义成抽象方法,则将导致通过该类来调用该方法时出现错误,因此static和abstract不能同时修饰某个方法。

(4)abstract关键字修饰的方法必须被子类重写才有意义,因此abstract方法不能定义为private访问权限。

希望对你有所帮助!

评分

参与人数 1技术分 +1 收起 理由
洪建超 + 1

查看全部评分

回复 使用道具 举报
何为抽象类呢。
抽象类首先他是个类,其次他是抽象的。
除了不了够用new关键字创建其对象外,其余都与类相同。
所以他能继承实体类,那是必须滴。
希望能帮到你
回复 使用道具 举报
本帖最后由 沉默de羔羊 于 2013-3-13 13:55 编辑

抽象类可以继承实体类,因为java中基本上类都继承Object类,那么抽象类也不例外,它也继承Object,Object就是个实体类!

貌似只要那个实体类不是final类,就没什么问题!
回复 使用道具 举报
可以的!他除了可以继承类,还可以实现接口。
回复 使用道具 举报
1,抽象类不可以实例化,不能new
        2,抽象是用来被继承的,
        3,抽象类中可以包含抽象方法,抽象方法是用abstract修饰的
          抽象类是用来被重写的。
          如果父类中包含抽象方法,那么子类必须将父类所有抽象方法都重写,
         抽象类
         1,如果父类是抽象类,子类是普通类 那么子类必须重写父类中的抽象方法。
         2.如果父类是抽象类,子类是抽象类  子类可以选择是否重写。
         3.父类是普通类,子类是抽象类。这种情况也可以存在。
        4 .抽象类中可不可以没有抽象方法。可以
        5.普通类中可不可以有抽象方法。 不可以
        6.抽象类中有没有构造? 有  帮助子类实例化.
                abstract不能和static,final,private一起使用。
                final与abstract不可以  这两个是完全相反的操作。
                private与abstract不可以  因为private私有化了,就不能被继承了。
回复 使用道具 举报
可以继承。其实从Object就是个实体类,java的API文档里,每个抽象类的条目里都明确写着直接或间接继承自Object,所以这点是没有疑问的。
关键在于这答案里所说的“前提是实体类必须有明确的构造函数”一句,是什么意思。
一般学习者会写的简单试验代码:
class A{}abstract class B extends A{}
似乎和“实体类必须有明确的构造函数”完全没有关系。
这个问题涉及到两个个基础知识:

1.所有的class都必须有一个构造方法,如果你没有在代码里声明构造方法,系统会自动给你生成一个公有无参的构造方法。而只要你自己声明了一个构造方法,无论有参无参,私有公有,系统就不再帮你生成默认无参构造器了。

2.所有的子类构造器都要求在第一行代码中调用父类构造器,如果不写,系统默认去调用父类的无参构造器。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马