黑马程序员技术交流社区
标题:
抽象类 ..
[打印本页]
作者:
樊玲
时间:
2013-3-13 13:24
标题:
抽象类 ..
本帖最后由 樊玲 于 2013-3-13 16:11 编辑
抽象类可不可以继承实体类呢?都有什么需要注意的地方。。。
作者:
黑马-郑玉元
时间:
2013-3-13 13:34
可以继承。其实从Object就是个实体类,java的API文档里,每个抽象类的条目里都明确写着直接或间接继承自Object类!
class A{}
abstract class B extends A{}
结果完全正常,编译通过。
作者:
疯狂程序
时间:
2013-3-13 13:35
在编程语句中用 abstract 修饰的类是抽象类。在java中,含有抽象方法的类称为抽象类,同样不能生成对象,同时抽象类是不完整的,并且它只能用作基类。
它与非抽象类的不同在于抽象类不能直接实例化,允许(但不要求)抽象类包含抽象成员。
作者:
scott0610
时间:
2013-3-13 13:46
抽象类和抽象方法原则:
(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访问权限。
希望对你有所帮助!
作者:
HM刘俊
时间:
2013-3-13 13:47
何为抽象类呢。
抽象类首先他是个类,其次他是抽象的。
除了不了够用new关键字创建其对象外,其余都与类相同。
所以他能继承实体类,那是必须滴。
希望能帮到你
作者:
沉默de羔羊
时间:
2013-3-13 13:53
本帖最后由 沉默de羔羊 于 2013-3-13 13:55 编辑
抽象类可以继承实体类,因为java中基本上类都继承Object类,那么抽象类也不例外,它也继承Object,Object就是个实体类!
貌似只要那个实体类不是final类,就没什么问题!
作者:
HM张超
时间:
2013-3-13 15:00
可以的!他除了可以继承类,还可以实现接口。
作者:
黑马17期-闫东东
时间:
2013-3-13 15:36
1,抽象类不可以实例化,不能new
2,抽象是用来被继承的,
3,抽象类中可以包含抽象方法,抽象方法是用abstract修饰的
抽象类是用来被重写的。
如果父类中包含抽象方法,那么子类必须将父类所有抽象方法都重写,
抽象类
1,如果父类是抽象类,子类是普通类 那么子类必须重写父类中的抽象方法。
2.如果父类是抽象类,子类是抽象类 子类可以选择是否重写。
3.父类是普通类,子类是抽象类。这种情况也可以存在。
4 .抽象类中可不可以没有抽象方法。可以
5.普通类中可不可以有抽象方法。 不可以
6.抽象类中有没有构造? 有 帮助子类实例化.
abstract不能和static,final,private一起使用。
final与abstract不可以 这两个是完全相反的操作。
private与abstract不可以 因为private私有化了,就不能被继承了。
作者:
437857487
时间:
2013-3-13 16:27
可以继承。其实从Object就是个实体类,java的API文档里,每个抽象类的条目里都明确写着直接或间接继承自Object,所以这点是没有疑问的。
关键在于这答案里所说的“前提是实体类必须有明确的构造函数”一句,是什么意思。
一般学习者会写的简单试验代码:
class A{}abstract class B extends A{}
似乎和“实体类必须有明确的构造函数”完全没有关系。
这个问题涉及到两个个基础知识:
1.所有的class都必须有一个构造方法,如果你没有在代码里声明构造方法,系统会自动给你生成一个公有无参的构造方法。而只要你自己声明了一个构造方法,无论有参无参,私有公有,系统就不再帮你生成默认无参构造器了。
2.所有的子类构造器都要求在第一行代码中调用父类构造器,如果不写,系统默认去调用父类的无参构造器。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2