黑马程序员技术交流社区

标题: 抽象类中的问题 [打印本页]

作者: 创出一片辉煌    时间: 2012-8-7 00:00
标题: 抽象类中的问题
今天老师讲的抽象类,发现以前我从来没思考过这些问题,只知道是什么不知道为什么,哎!
1:抽象类中是否有构造方法?不能实例化,为什么有构造方法?
2,抽象关键字abstract不可以和哪些关键字共存?
3.抽象类中可以没有抽象方法,这样的类有什么用吗?
4.JAVA中不能多继承,但所有类有都是object的子类,如果student是person类的子类,但student同时又是
  object的子类,这不是student extends person,object吗??
作者: 权跃杰    时间: 2012-8-7 00:07
1.抽象类有构造方法。抽象类不能被实例化。 抽象类中的构造方法供子类实例化调用。
2. **private:
                        私有内容子类继承不到,所以,不能重写。
                        但是,abstract修饰的方法,要求被重写。两者冲突。
           **final
                        final修饰的方法不能被重写。
                        而abstract修饰的方法,要求被重写。两者冲突。                       
                **static
                        假如一个抽象方法能通过static修饰,那么这个方法,就可以直接通过类名调用。
                        而抽象方法是没有方法体的,这样的调用无意义。所以,不能用static修饰。
3. 抽象类是把所有类的共性集中,可以用于模块化设计,
4.一个类如果是经继承另一个类,将不会继承object类,因为他的父类
   已经继承object类,实现多层继承,这样的关系是:Person extends Object,Student extends Person
作者: 权跃杰    时间: 2012-8-7 00:08
1.抽象类有构造方法。抽象类不能被实例化。 抽象类中的构造方法供子类实例化调用。
2. **private:
                        私有内容子类继承不到,所以,不能重写。
                        但是,abstract修饰的方法,要求被重写。两者冲突。
           **final
                        final修饰的方法不能被重写。
                        而abstract修饰的方法,要求被重写。两者冲突。                       
                **static
                        假如一个抽象方法能通过static修饰,那么这个方法,就可以直接通过类名调用。
                        而抽象方法是没有方法体的,这样的调用无意义。所以,不能用static修饰。
3. 抽象类是把所有类的共性集中,可以用于模块化设计,
4.一个类如果是经继承另一个类,将不会继承object类,因为他的父类
   已经继承object类,实现多层继承,这样的关系是:Person extends Object,Student extends Person
作者: 贾飞雨    时间: 2012-8-7 00:17
本帖最后由 贾飞雨 于 2012-8-7 00:19 编辑

不要把抽象类想的多难,抽象类和普通类差不多,
1
抽象类的构造方法的存在意义就是为了子类的实例化,这句懂不?
2
abstract和private,final,static不可以共存,原因分别是:
abstract的存在就是为了让子类必须实例化,如果不实例化这个方法,那么子类也是抽象的,所以如果用private修饰之后就看不见了,那还怎么实例化,
用final修饰之后则是最终版,也就是你什么都做不了了,那还怎么实例化呢,而static修饰之后会可以静态调用,可是你都没有实体,是不可能调用的,
所以也不可以。
3
如果抽象类中没有抽象方法,那么它唯一存在的意义就是不让这个类创建对象,
4java中不可能多继承,但是可以单向多继承,一时想不起来那个词了,就是a继承于b,b继承与c,c又继承于a
在你举的例子中你可以理解为Person继承了Object,而Student又继承了Person,不要专牛角尖了
作者: 创出一片辉煌    时间: 2012-8-8 11:35
权跃杰 发表于 2012-8-7 00:08
1.抽象类有构造方法。抽象类不能被实例化。 抽象类中的构造方法供子类实例化调用。
2. **private:
                        私 ...

已解决!   
作者: 黑马王冬冬    时间: 2012-8-9 00:13
1.抽象类不能被实例化。抽象类含有构造器,其主要是用于被其子类调用。
2.抽象关键字abstract不可以和哪些关键字共存?
==抽象类或方法需要被继承或重写,故而抽象类或方法无法使用final修饰符修饰;
==抽象方法无法通过类来调用,因此无法使用static修饰符修饰;
当使用static修饰一个方法时,表明该方法属于该类本身,但是当通过该类调用抽象方法时,由于抽象方法没有方法体会导致错误。
==抽象方法必须被其子类重写才有意义,因而抽象方法不能使用private方法权限。
3.java不支持多继承,准确的说,java不支持直接多继承,也就是说java支持间接多继承。楼主说的情况属于间接继承,没有问题。。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2