黑马程序员技术交流社区

标题: 关于继承抽象类的问题 [打印本页]

作者: java.love    时间: 2013-3-14 14:56
标题: 关于继承抽象类的问题
本帖最后由 黄玉昆 于 2013-3-16 13:33 编辑

abstract class Student
{
        abstract void study();
        void sleep(){
        System.out.println("should sleep");
        }
}
class BaseStudent extends Student
{
        
        void study()
        {
               
                System.out.println("baseStudy");
        }
}
class AdvStudent extends Student
{
        void study()
        {
                System.out.println("advStudy");
        }
}
public class Study11{
public static void main(String[] args)
        {
                BaseStudent bs = new BaseStudent();
                bs.study();
                bs.sleep();
        }
}
sleep方法不需要在子类中重写吗?还有这个程序中super存在吗?
作者: HM李帅    时间: 2013-3-14 14:59
sleep方法如果你不想修改
想要沿用Student 里的sleep方法的话
那就不需要在子类里面重写了
这个程序中有super
对于BaseStudent 和AdvStudent 来说
Student 就是它们的super
作者: 沉默de羔羊    时间: 2013-3-14 15:00
可以重写的,就是子类会覆盖父类的方法。

有继承存在就必定会存在super,super是调用父类构造器的!
作者: java.love    时间: 2013-3-14 15:03
抽象类的默认构造函数是什么
abstract class Student
{
        abstract void study();
        void sleep(){
        System.out.println("should sleep");
        }
}
子类继承父类的默认构造函数是什么
作者: 李思杰    时间: 2013-3-14 15:09
因为sleep是一般方法,子类可以直接调用,所以不需要重写。
在子类的构造函数中第一行有一个默认的隐式语句。 super();
子类的实例化过程:子类中所有的构造函数默认都会访问父类中的空参数的构造函数。
因为子类继承了父类,获取到了父类中内容(属性),所以在使用父类内容之前,
要先看父类是如何对自己的内容进行初始化的。
作者: 石伟    时间: 2013-3-14 15:11
java.love 发表于 2013-3-14 15:03
抽象类的默认构造函数是什么
abstract class Student
{


抽象类默认构造函数
Student()
{
}

子类默认构造函数
BaseStudent()
{
       super();
}


作者: MyNameIs520    时间: 2013-3-14 15:33
楼主你好:
1.你的代码里,父类sleep方法是一般方法,子类可以覆写也可以不覆写。若是抽象方法,子类必须覆写!
2.每个子类的构造其中都有super(),继承父类构造器,这是一定的。
作者: wangjinyu501    时间: 2013-3-14 15:41
1、因为sleep方法是一般方法,所以不需要重写
2、每个子类的构造其中都有super(),继承父类构造器
作者: Benwolf0818    时间: 2013-3-14 15:41
通过你问的问题你可以看出,你是对抽象类的用法模糊不清
1)在继承抽象类时,必须覆盖该类中的每一个抽象方法,而每个已实现的方法必须和抽象类中指定的方法一样,接收相同数目和类型的参数,具有同样的返回值,这一点与接口相同。
2)当父类已有实际功能的方法时,该方法在子类中可以不必实现,直接引用的方法,子类也可以重写该父类的方法(继承的概念)。
3)而实现 (implement)一个接口(interface)的时候,是一定要实现接口中所定义的所有方法,而不可遗漏任何一个。
4)另外,抽象类是不能产生对象的,但可以由它的实现类来声明对象。
有鉴于此,在实现接口时,我们也常写一个抽象类,来实现接口中的某些子类所需的通用方法,接着在编写各个子类时,即可继承该抽象类来使用,省去在每个都要实现通用的方法的困扰。
super变量是直接指向超类的构造函数,用来引用超类中的变量和方法。super在这个程序中是由系统提供默认的
作者: tianyun    时间: 2013-3-14 16:24
不需要重写,因为baseStudent继承了Student非抽象方法sleep,所以本身具备该方法,当然也可以重写,但得注意重写规则。super关键字表示本类的父类,只能在本类的非静态方法中方法中调用,如同this。使用时注意放在函数开头第一句。




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