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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© laiminghui 高级黑马   /  2013-12-24 12:29  /  1403 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文





抽象类 和 抽象方法  具体有什么用  ??


假如在JAVA语言体系  不存在 抽象类 和 抽象方法  有什么问题???

评分

参与人数 1黑马币 +3 收起 理由
乔兵 + 3

查看全部评分

6 个回复

倒序浏览
     抽象类就是不能使用new方法进行实例化的类,即没有具体实例对象的类。抽象类有点类似“模板”的作用,目的是根据其格式来创建和修改新的类。对象不能由抽象类直接创建,只可以通过抽象类派生出新的子类,再由其子类来创建对象。当一个类被声明为抽象类时,要在这个类前面加上修饰符abstract。
     在抽象类中的成员方法可以包括一般方法和抽象方法。抽象方法就是以abstract修饰的方法,这种方法只声明返回的数据类型、方法名称和所需的参数,没有方法体,也就是说抽象方法只需要声明而不需要实现。当一个方法为抽象方法时,意味着这个方法必须被子类的方法所重写,否则其子类的该方法仍然是abstract的,而这个子类也必须是抽象的,即声明为abstract。
      抽象类中不一定包含抽象方法,但是包含抽象方法的类一定要被声明为抽象类。抽象类本身不具备实际的功能,只能用于派生其子类。抽象类中可以包含构造方法,但是构造方法不能被声明为抽象。
  1. 程序举例:
  2. abstract class Animal    //定义抽象类
  3. {
  4.     String str;
  5.     Animal(String s)     //定义抽象类的一般方法
  6.    {
  7.         str=s;
  8.    }
  9.     abstract void eat();      //定义抽象方法
  10. }
  11. class Horse extends Animal     //定义继承Animal的子类
  12. {  
  13.     String str;
  14.     Horse(String s)
  15.    {
  16.       super(s);      //调用父类的构造方法
  17.    }
  18.     void eat()      //重写父类的抽象方法
  19.    {     
  20.       System.out.println("马吃草料!");
  21.    }
  22. }
  23. class Dog extends Animal
  24. {
  25.     String str;
  26.     Dog(String s)
  27.    {
  28.       super(s);
  29.     }
  30.     void eat()
  31.     {
  32.     System.out.println("狗吃骨头!");
  33.     }
  34. }
  35. class test
  36. {
  37.     public static void main(String args[])
  38.    {
  39.       Horse Horse1 = new Horse("马");
  40.       Dog Dog1 = new Dog("狗");
  41.       Horse1.eat();
  42.       Dog1.eat();
  43.     }
  44. }
  45. 运行结果:
  46.     马吃草料!
  47.     狗吃骨头!
复制代码

  

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 776699 于 2013-12-24 12:41 编辑

通过继承它实现多态,后期绑定,可以为将来要实现的东西做好接口,实现重用性,增加类扩展性。开发时,定义一些接口,抽象类等还可以降低模块间的耦合性。
回复 使用道具 举报
抽象类就是没有实际意义的类,是对一类事物共同特性的抽象体现,不能进行实例化,抽象方法是没有方法体,子类要重写此方法,好比有一个父类Pet,子类:Dog和Penguin,父类是抽象类,定义好共有的属性例如年龄、性别等,子类继承父类后就有了这些属性。这就是多态的体现,这样可以减少代码量,使代码更加健壮。

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
1)抽象类就是包含抽象方法的类,当然也可不包含抽象方法,只要你给类声明了abstract了就是抽象类
2)抽象方法定义在抽象类里,供具体实现类去实现它
抽象类是用abstract修饰的类都叫做抽象类,
抽象类,主要是用来继承,子类重写(override)父类(也就是抽象类)的方法。
抽象方法和抽象类,主要是sun公司的一次抽象,使程序员有个方向,然后自己去implements类,并根据自己的意愿去实现,就好象说父亲有个理想没实现,就留给下一代,下一代如果说不想去实现,就传给下一代,由一代代的努力去完成,有点像愚公移山,好处就在:当前程序没必要那么大的扩展,就把它做为一个抽象,留下来,这样,以后也可以通过implements去扩展。
抽象类可以就是加个abstract ,抽象类和接口很像,抽象类可以有自己的私有属性,抽象类中的方法可以没有函数体抽象方法,有抽象方法的必须是抽象类,任何类继承了抽象类,就必须重写抽象类中的抽象方法,
  

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
抽象类是从其他若干个具有相同属性与行为的类中进一步抽象出来的类,可以设计方法,属性,如果把类设计为抽象类,那么这个类是不能被实例化的,只能被继承的子类(子类也可以为抽象类,也可以不是)间接使用,抽象类有构造,是一个完整的类,抽象类中可以包含抽象方法,也可以不含,那么问题来了,既然把类设计成抽象,肯定是用于设计多态用的,一般都会包含抽象方法:

子类继承了抽象类,如果抽象类中含有抽象方法,那么子类也继承了抽象方法,包含抽象方法的类必须是抽象类,不然子类就必须重写抽象方法,就是提供具体实现,完成多态,

下面3条原则保证了抽象方法必须重写:

1、必须用public abstract修饰抽象方法,private ,static 都不能用于修饰

2、包含抽象方法的类必须是抽象类

3、抽象类可以不含抽象方法

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
类是对对象的抽象,可以把抽象类理解为把类当作对象,抽象成的类叫做抽象类。
抽象类实现了面向对象的一个原则,把可变的和不可变的分离。抽象类就是定义不可变的,而把可变的让子类去实现。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马