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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始


abstract class Fu
{
        abstract void show();
        abstract void speak();
        abstract void sleep();
}
class Zi extends Fu
{
        void show(){}
        void speak(){}
}
/*
        为什么子类一定要将父类中所有的抽象方法都覆盖后子类才可以呢?
        以上的(会编译错误)Zi类继承Fu类后等同于下面的代码
*/

abstract class Zi
{
        void show(){}
        void speak(){}
        abstract void sleep();//因为抽象方法一定是在抽象类中,所以Zi类一定是抽象类
}

5 个回复

倒序浏览
因为子类继承了父类啊。
回复 使用道具 举报
抽象类的非抽象子类必须实现重载父类中的所有抽象方法。
因为抽象方法是非private的,那么就会被子类继承,
如果子类不重写抽象方法,按照抽象类的定义,那么子类也只能是抽象类。
所以,抽象类的子类要么也是抽象类,要么重载了其父类的所有抽象方法 。{:2_30:}
回复 使用道具 举报
P李勇 发表于 2015-4-2 01:39
抽象类的非抽象子类必须实现重载父类中的所有抽象方法。
因为抽象方法是非private的,那么就会被子类继承, ...

谢谢师兄的提点。
不过不是重载而是重写或覆盖!
回复 使用道具 举报
抽象类不可以被创建对象(实例化)。只有通过子类继承抽象类并覆盖了抽象类中的所有抽象方法后,该子类才变成了非抽象类,才可以实例化。否则,该子类还是一个抽象类,因为继承了父类的抽象方法。
回复 使用道具 举报 1 0
小邱 发表于 2015-4-2 13:00
谢谢师兄的提点。
不过不是重载而是重写或覆盖!

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