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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 赵方明 中级黑马   /  2012-7-7 13:36  /  2436 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 赵方明 于 2012-7-7 13:37 编辑

abstract class Student
{
    abstract final void study();
   
   
}
上面这个,因为抽象方法没有方法体,创建了对象也没有意义,所以不能创建。
abstract class Student
{
    abstract final void study();
    //abstract void study1();
    void sleep()
    {
        System.out.println("躺着");
    }
}
下面这个,有一个sleep()函数,有构造函数,为什么不能创建对象呢?
创建之后,只用一般方法,不去管抽象方法不就可以了吗

4 个回复

正序浏览
本帖最后由 留鹤村 于 2012-7-7 16:41 编辑

  假设有一个类square(正方形),另有一个类 circle(圆);他们有各自的属性(求各自的面积,各自的边长)以及一些共有属性(颜色),将共有属性定义到一个类中figure(几何图形)。但是,在使用时,求圆的面积只能用circle类中的方法,求长方形的面积只能用square类中定义的方法。虽然在square和circle类中求面积的方法不同,但都有求面积的行为,所以,将求面积的行为进一步抽象,得到一个抽象方法:getArea(),figure类就成为抽象类,getArea()具体的实现在各自的类中定义。这样,通过多态和动态绑定,在以前需要circle.getArea()或square.getArea()的地方,只需要写成figure.getArea().
所以,抽象类的出现多是为了利用多态和动态绑定,实现通用程序设计。并且由于抽象类是对同一类对象的高度抽象,所以,在设计类时,抽象类一般是处于接近顶层的位置,对抽象类建立对象没有太大的意义,抽象类的非抽象数据可以通过继承得到。
回复 使用道具 举报
abstract class Student
{
    abstract final void study();   
}
上面这个,因为抽象方法没有方法体,创建了对象也没有意义,所以不能创建。//抽象类是需要子类继承并实现所有的抽象方法才能被创建使用
abstract class Student
{
    abstract final void study();     //    抽象方法本身必须要子类继承实现,但是final方法又不能被覆盖,这不矛盾了么,所以不能一起用
    //abstract void study1();
    void sleep()
    {
        System.out.println("躺着");
    }
}
下面这个,有一个sleep()函数,有构造函数,为什么不能创建对象呢? //Java中规定抽象类只有被继承的子类实现了所有的抽象方法才能创建对象,抽象类本身不能创建,你可以这样思考,一个没有方法体的类,即使创建了对象也没意义的。
创建之后,只用一般方法,不去管抽象方法不就可以了吗 //即使你不管抽象方法,Java也不允许你这么做,因为这样会有隐患。用毕老师的话,“这叫严谨,也叫强制!”
==========================================================
希望对你有帮助~!~
回复 使用道具 举报
一个类创建一个对象,那么这个对象就可以调用类中的方法,不管你去不去调用,对象是可以的,也就是说,就算你不调用抽象方法,不代表它不能调用,调用抽象方法是没有意义的,所以不能创建对象,必须要子类继承后重写全部抽象方法后创建子类对象
回复 使用道具 举报
抽象类不能实例化,即不能创建对象。
抽象类中可以有抽象方法,实例方法,静态方法。实例方法要通过对象来调用,静态方法可以直接用抽象类类名来调用。
abstract final void study();//这样定义抽象方法为final方法是不正确的
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马