我是一个java初学者  想问大家一个java问题,希望各位大哥大姐,各位专业人士给予解答 在这里先谢过了

第一个问题就是 java中 是不是类中有抽象方法 累就一定要声明为抽象类呢?

第二个问题就是 在java中,类中有抽象方法 就成了抽象类 因而不能实例化,而在子类中只要重写该方法就可以进行实例化了 这是为什么呢 我的意思是 他的子类不也继承了父类中的这个抽象方法吗 为什么就不是抽象类了呢 为什么就能实例化了呢

一、必须要声明为抽象类,这是java语法的规定
二、因为你重新写过原来的抽象方法的实体,等于具体实例化了这个原来的抽象方法,所以这个方法已经跟原来父类的方法不一样了。追问

这个我能理解 但是他还是继承了原来的那个抽象方法啊 也即是他先在拥有了原来的那个抽象方法和现在重新的这个方法
也不知道这样理解是不是正确的 但重多态这个角度来看 我觉得就是这样理解吧
希望大哥给个给个更好的解答 谢谢了

追答

你看到抽象方法有具体的方法实体吗?没有。
但是你继承了它并重写它的方法实体,所以就实例化了这个方法。请注意理解实例化的说法的不同表达的含义。
“也即是他先在拥有了原来的那个抽象方法和现在重新的这个方法”这个理解是错误的。

追问

但是我看马上兵老师那个视频 他说再给每个子类实例化成对象的时候 都得先将其父类实例化
但是对于一个父类是抽象的类 他的父类如何能够实现实例化呢
或者说这更本就是我理解错了呢
希望大哥解释一下 谢了

温馨提示:内容为网友见解,仅供参考
第1个回答  2012-07-03
1. 抽象类中可以没有抽象方法,但是抽象方法一定在抽象类中。
2. 虽然子类继承了父类的抽象方法,但是它实现了该方法,你这样理解:
①子类也是一个类定义
②子类的定义和方法声明没有包含abstract关键字的
③如果子类没有实现父类的抽象方法,它自己也要定义成抽象类,包含abstract关键字。本回答被网友采纳
第2个回答  2012-07-03
第一个 问题 答案是的
第二个 问题 其实你自己已经回答了 为什么必须重写 就因为有抽象方法 所以通过重写把它覆盖掉追问

那个覆盖只是重表层上看吧 实际上父类原来有的那个方法和重写了她的那个新方法都死存在的啊 不是有个叫做多态的东西吗 他就可以根据实例对象访问不同的方法啊
另外不是每一个子类的实例 都得先要实例里面的那个父类吗 而里面那个父类是抽象的怎么能够实例化呢
我真的对这个问题好糊涂 希望大哥给个详细的解释 谢谢了

追答

是存在 但存在也不过是类似指针的调用 你重写了 在本类中就默认使用这个新的 除非你用super去调用父类的方法 每个子类的构造方法都会默认调用父类的无参构造方法 而抽象方法虽然不能直接new 但它还是有无参构造方法的

第3个回答  2012-07-03
准备开个犬舍 找个美女护士能照顾好狗狗们 解决一些狗狗常见的病吗
第4个回答  2012-07-03
其实你自己已经回答了 为什么必须重写 就因为有抽象方法 所以通过重写把它覆盖掉追问

就算覆盖了 那个多态是怎么回事呢

第5个回答  2012-07-03
子类也是一个类定义;子类的定义和方法声明没有包含abstract关键字的;如果子类没有实现父类的抽象方法,它自己也要定义成抽象类,包含abstract关键字,实例化是在子类定义的元素的得到应用。
第6个回答  2012-07-03
很简单,就像盖房子一样,你把它分解了
它变为了单一元素也就不抽象了
相似回答