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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© java.love 中级黑马   /  2013-3-14 14:56  /  2013 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 黄玉昆 于 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存在吗?

点评

如果问题未解决,请继续追问回复者,如果问题已解决,请尽快将问题分类改为已解决,否则将扣除相应的技术分,谢谢  发表于 2013-3-16 07:17
如果问题已经解决了,请将分类改为已解决,谢谢  发表于 2013-3-15 08:26

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

9 个回复

倒序浏览
sleep方法如果你不想修改
想要沿用Student 里的sleep方法的话
那就不需要在子类里面重写了
这个程序中有super
对于BaseStudent 和AdvStudent 来说
Student 就是它们的super
回复 使用道具 举报
可以重写的,就是子类会覆盖父类的方法。

有继承存在就必定会存在super,super是调用父类构造器的!
回复 使用道具 举报
抽象类的默认构造函数是什么
abstract class Student
{
        abstract void study();
        void sleep(){
        System.out.println("should sleep");
        }
}
子类继承父类的默认构造函数是什么
回复 使用道具 举报
因为sleep是一般方法,子类可以直接调用,所以不需要重写。
在子类的构造函数中第一行有一个默认的隐式语句。 super();
子类的实例化过程:子类中所有的构造函数默认都会访问父类中的空参数的构造函数。
因为子类继承了父类,获取到了父类中内容(属性),所以在使用父类内容之前,
要先看父类是如何对自己的内容进行初始化的。

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
java.love 发表于 2013-3-14 15:03
抽象类的默认构造函数是什么
abstract class Student
{


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

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

回复 使用道具 举报
楼主你好:
1.你的代码里,父类sleep方法是一般方法,子类可以覆写也可以不覆写。若是抽象方法,子类必须覆写!
2.每个子类的构造其中都有super(),继承父类构造器,这是一定的。
回复 使用道具 举报
1、因为sleep方法是一般方法,所以不需要重写
2、每个子类的构造其中都有super(),继承父类构造器
回复 使用道具 举报
通过你问的问题你可以看出,你是对抽象类的用法模糊不清
1)在继承抽象类时,必须覆盖该类中的每一个抽象方法,而每个已实现的方法必须和抽象类中指定的方法一样,接收相同数目和类型的参数,具有同样的返回值,这一点与接口相同。
2)当父类已有实际功能的方法时,该方法在子类中可以不必实现,直接引用的方法,子类也可以重写该父类的方法(继承的概念)。
3)而实现 (implement)一个接口(interface)的时候,是一定要实现接口中所定义的所有方法,而不可遗漏任何一个。
4)另外,抽象类是不能产生对象的,但可以由它的实现类来声明对象。
有鉴于此,在实现接口时,我们也常写一个抽象类,来实现接口中的某些子类所需的通用方法,接着在编写各个子类时,即可继承该抽象类来使用,省去在每个都要实现通用的方法的困扰。
super变量是直接指向超类的构造函数,用来引用超类中的变量和方法。super在这个程序中是由系统提供默认的

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
不需要重写,因为baseStudent继承了Student非抽象方法sleep,所以本身具备该方法,当然也可以重写,但得注意重写规则。super关键字表示本类的父类,只能在本类的非静态方法中方法中调用,如同this。使用时注意放在函数开头第一句。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马