黑马程序员技术交流社区

标题: 为什么子类一定要将父类中所有的抽象方法都覆盖后子类... [打印本页]

作者: 小邱    时间: 2015-4-1 22:37
标题: 为什么子类一定要将父类中所有的抽象方法都覆盖后子类...

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类一定是抽象类
}


作者: 小七28    时间: 2015-4-2 00:48
因为子类继承了父类啊。
作者: P李勇    时间: 2015-4-2 01:39
抽象类的非抽象子类必须实现重载父类中的所有抽象方法。
因为抽象方法是非private的,那么就会被子类继承,
如果子类不重写抽象方法,按照抽象类的定义,那么子类也只能是抽象类。
所以,抽象类的子类要么也是抽象类,要么重载了其父类的所有抽象方法 。{:2_30:}
作者: 小邱    时间: 2015-4-2 13:00
P李勇 发表于 2015-4-2 01:39
抽象类的非抽象子类必须实现重载父类中的所有抽象方法。
因为抽象方法是非private的,那么就会被子类继承, ...

谢谢师兄的提点。
不过不是重载而是重写或覆盖!
作者: 王小乖    时间: 2015-4-2 13:11
抽象类不可以被创建对象(实例化)。只有通过子类继承抽象类并覆盖了抽象类中的所有抽象方法后,该子类才变成了非抽象类,才可以实例化。否则,该子类还是一个抽象类,因为继承了父类的抽象方法。
作者: P李勇    时间: 2015-4-2 13:24
小邱 发表于 2015-4-2 13:00
谢谢师兄的提点。
不过不是重载而是重写或覆盖!

噢噢,是重写




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