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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© SilenceSea 黑马帝   /  2011-11-8 08:48  /  2658 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

抽象类和抽象方法定义使用的时候都有哪些规则?越详细越好,谢谢大家

7 个回复

倒序浏览
1.某个类只要包含至少一个抽象方法就必须声明为抽象类.
2.声明为抽象的方法,在实现的时候必须包含相同的或者更低的访问级别.例如,如果某个方法在抽象类中的访问级别是受保护的,在继承类中它就必须是受保护的或者是公共的,而不能是私有的.
3.不能使用new关键字创建抽象类的实例.
4,被声明为抽象的方法不能包含函数体
5.如果将扩展的类也声明为抽象的,在扩展抽象类时,就可以不用实现所有的抽象方法.在创建具有层次的对象时,这种做法是很有用的.
6.抽象类和抽象方法前面必须要加abstract

评分

参与人数 1技术分 +1 收起 理由
杨玉揆 + 1

查看全部评分

回复 使用道具 举报
抽象类就是不能使用new方法进行实例化的类,即没有具体实例对象的类。抽象类有点类似“模板”的作用,目的是根据其格式来创建和修改新的类。对象不能由抽象类直接创建,只可以通过抽象类派生出新的子类,再由其子类来创建对象。当一个类被声明为抽象类时,要在这个类前面加上修饰符abstract。
举一个小例子:

abstract class Animal    //定义抽象类
{
    String str;

    Animal(String s)     //定义抽象类的一般方法
   {

        str=s;

   }

    abstract void eat();      //定义抽象方法

}

class Horse extends Animal     //定义继承Animal的子类
{  

    String str;

    Horse(String s)
   {

      super(s);      //调用父类的构造方法

   }

    void eat()      //重写父类的抽象方法
   {     

      System.out.println("马吃草料!");

   }

}

class Dog extends Animal
{

    String str;

    Dog(String s)
   {

      super(s);

    }

    void eat()
    {

    System.out.println("狗吃骨头!");

    }

}

class test
{

    public static void main(String args[])
   {

      Horse Horse1 = new Horse("马");

      Dog Dog1 = new Dog("狗");

      Horse1.eat();

      Dog1.eat();

    }

}

运行结果:

    马吃草料!

    狗吃骨头!

评分

参与人数 1技术分 +1 收起 理由
杨玉揆 + 1

查看全部评分

回复 使用道具 举报
       抽象的基础类和接口
       设计程序时,我们经常都希望基础类只为自己的衍生类提供一个接口。也就是说,我们不想其他任何人实际创建基础类的一个对象,只对上溯造型成它,以便使用它们的接口。为达到这个目的,需要把那个类变成“抽象”的——使用abstract关键字。若有人试图创建抽象类的一个对象,编译器就会阻止他们。这种工具可有效强制实行一种特殊的设计。
亦可用abstract关键字描述一个尚未实现的方法——作为一个“根”使用,指出:“这是适用于从这个类继承的所有类型的一个接口函数,但目前尚没有对它进行任何形式的实现。”抽象方法也许只能在一个抽象类里创建。继承了一个类后,那个方法就必须实现,否则继承的类也会变成“抽象”类。通过创建一个抽象方法,我们可以将一个方法置入接口中,不必再为那个方法提供可能毫无意义的主体代码。
interface(接口)关键字将抽象类的概念更延伸了一步,它完全禁止了所有的函数定义。“接口”是一种相当有效和常用的工具。另外如果自己愿意,亦可将多个接口都合并到一起(不能从多个普通class或abstract class中继承)。
以上摘自《Think in java》希望对你有帮助
     至于抽象方法就好比你接触到某类事物,你发现他大概有某种功能,但不知到具体的实现方法,你就可以定义一个抽象方法先声明有这么一方法,直到其子类继承实现他。



 1.  java语言中,用abstract 关键字来修饰一个类时,这个类叫做抽象类,用abstract 关键字来修饰一个方法时,这个方法叫做抽象方法。格式如下:
  abstract class abstractClass{ …} //抽象类
  abstract returnType abstractMethod([paramlist]) //抽象方法

  抽象类必须被继承,抽象方法必须被重写。抽象方法只需声明,无需实现;抽象类不能被实例化,抽象类不一定要包含抽象方法。若类中包含了抽象方法,则该类必须被定义为抽象类。

 2. 接口

  接口是抽象类的一种,只包含常量和方法的定义,而没有变量和方法的实现,且其方法都是抽象方法。它的用处体现在下面几个方面:
  ◇ 通过接口实现不相关类的相同行为,而无需考虑这些类之间的关系。
  ◇ 通过接口指明多个类需要实现的方法。
  ◇ 通过接口了解对象的交互界面,而无需了解对象所对应的类。

  1)接口的定义
  接口的定义包括接口声明和接口体。
  接口声明的格式如下:
  [public] interface interfaceName[extends listOfSuperInterface] { … }
   extends 子句与类声明的extends子句基本相同,不同的是一个接口可有多个父接口,用逗号隔开,而一个类只能有一个父类。

  接口体包括常量定义和方法定义
  常量定义格式为:type NAME=value; 该常量被实现该接口的多个类共享; 具有public ,final, static的属性。
  方法体定义格式为:(具有 public和abstract属性)
  returnType methodName([paramlist]);

  2)接口的实现
  在类的声明中用implements子句来表示一个类使用某个接口,在类体中可以使用接口中定义的常量,而且必须实现接口中定义的所有方法。一个类可以实现多个接口,在implements子句中用逗号分开。

  3) 接口类型的使用
  接口作为一种引用类型来使用。任何实现该接口的类的实例都可以存储在该接口类型的变量中,通过这些变量可以访问类所实现的接口中的方法。




评分

参与人数 1技术分 +1 收起 理由
杨玉揆 + 1

查看全部评分

回复 使用道具 举报
这两个概念思路是很清晰的,抽象类就是一个包,在这样的一个包中,有很多的方法,这些方法可以被其子类实现,因此说是抽象的,而抽象的定义正是抛却现象对本质的把握;
    由于抽象类没有定义完整的实现,所以抽象类也没有自己的对象;
    一个抽象类的子类如果不是抽象类,则它必须为父类中所有的抽象方法提供提供方法体,即重写父类方法;
   只有抽象类才能有抽象方法,但是抽象类中还可以包括出除抽象类的其他方法;
   

评分

参与人数 1技术分 +1 收起 理由
宁超 + 1 赞一个!

查看全部评分

回复 使用道具 举报
抽象类中一定要有抽象方法,如果一个类继承了一个抽象类,如果没有实现该类中的所有抽象方法,那么 该类也必须声明为抽象类,抽象类一般实现了某些方法,供子类直接调用,由于子类对某些方法的实现方式不同,则将该方法声明为了抽象方法,在子类中再去具体的实现。
回复 使用道具 举报
wangqing 黑马帝 2011-11-8 19:18:08
7#
抽象类必须被继承,抽象方法中不一定有抽象方法,若类中包含抽象法,则该类必须被定义为抽象类。抽象类中的方法要被使用,必须由子类写其所有的抽象方法后,建立子类对象调用,如果子类只复写了部分抽象方法,那么该子类还是抽象类。
抽象方法必须被重写,抽象方法只需声明,无需实现。
回复 使用道具 举报
石宗银 黑马帝 2011-11-9 00:33:56
8#
看了张老师的线程代码,,发现 接口 如:Runnable run = new Runnalbe(public void run(){});  这样的语法行式是可以的,,自己试了下抽象类,这样类似的写法,也是可以的,,只是要在new 时,重写它的抽象方法,,,
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马