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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© zzkang0206 高级黑马   /  2014-2-14 08:51  /  1160 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

抽象
概念:抽象就是从多个事物中将共性的,本质的内容抽取出来。例如:狼和狗共性都是犬科,犬科就是抽象出来的概念。
抽象类:
Java中可以定义没有方法体的方法,该方法的具体实现由子类完成,该方法称为抽象方法,包含抽象方法的类就是抽象类。
抽象方法的由来:
多个对象都具备相同的功能,但是功能具体内容有所不同,那么在抽取过程中,只抽取了功能定义,并未抽取功能主体,那么只有功能声明,没有功能主体的方法称为抽象方法。
例如:狼和狗都有吼叫的方法,可是吼叫内容是不一样的。所以抽象出来的犬科虽然有吼叫功能,但是并不明确吼叫的细节。
抽象类的特点
1.抽象类和抽象方法必须用abstract关键字来修饰。
2.抽象方法只有方法声明,没有方法体,定义在抽象类中。格式:修饰符abstract 返回值类型   函数名(参数列表) ;
3.抽象类不可以被实例化,也就是不可以用new创建对象。原因如下:
抽象类是具体事物抽取出来的,本身是不具体的,没有对应的实例。例如:犬科是一个抽象的概念,真正存在的是狼和狗。
而且抽象类即使创建了对象,调用抽象方法也没有意义。
4.抽象类通过其子类实例化,而子类需要覆盖掉抽象类中所有的抽象方法后才可以创建对象,否则该子类也是抽象类。
抽象类和一般类区别?
1.该如何描述事物,就如何描述事物,只不过,该事物出现了一些看不懂的东西。
这些不确定的部分,也是该事物的功能,需要明确出现。但是无法定义主体。通过抽象方法来表示。
2.抽象类比一般类多个了抽象函数。就是在类中可以定义抽象方法。
3.抽象类不可以实例化。
特殊:抽象类中可以不定义抽象方法,这样做仅仅是不让该类建立对象。
抽象关键字abstract不可以和哪些关键字共存?
abstract 关键字,和哪些关键字不能共存。
final:被final修饰的类不能有子类。而被abstract修饰的类一定是一个父类。
private: 抽象类中的私有的抽象方法,不被子类所知,就无法被复写。而抽象方法出现的就是需要被复写。
static:如果static可以修饰抽象方法,那么连对象都省了,直接类名调用就可以了。可是抽象方法运行没意义。
抽象类中是否有构造函数?
有,抽象类是一个父类,要给子类提供实例的初始化。
Abstract

1.    /*
2.    假如我们在开发一个系统时需要对员工进行建模,员工包含 3 个属性:
3.    姓名、工号以及工资。经理也是员工,除了含有员工的属性外,另为还有一个
4.    奖金属性。请使用继承的思想设计出员工类和经理类。要求类中提供必要的方
5.    法进行属性访问。  
7.    员工类:name id pay
8.    经理类:继承了员工,并有自己特有的bonus。
11.  */  
12.     
13.  abstract class Emplyee  
14.  {  
15.           private String name;  
16.           private String id;  
17.           private Double pay;  
18.            
19.           Emplyee(Stringname,String id,Double pay)  
20.           {  
21.                     this.name= name;  
22.                     this.id= id;  
23.                     this.pay= pay;  
24.           }  
25.     
26.           public abstract void work();  
27.  }  
28.     
29.  class Manager extends Emplyee  
30.  {  
31.           private int bouns;  
32.           Manager(Stringname,String id,Double pay,int bonus)  
33.           {  
34.                     super(name,id,pay);  
35.                     this.bouns= bouns;  
36.           }  
37.     
38.           public void work()  
39.           {  
40.                     System.out.println("Managerwork");  
41.           }  
42.  }  
43.     
44.  class Pro extends Emplyee  
45.  {  
46.           Pro(Stringname,String id,Double pay)  
47.           {  
48.                     super(name,id,pay);  
49.           }  
50.     
51.           public void work()  
52.           {  
53.                     System.out.println("Prowork");  
54.           }  
55.  }  
56.            
57.     
58.  class AbstractDemo  
59.  {  
60.           public static void main(String[] args)  
61.           {  
62.                     Managerm = new Manager("张三","001",12000.00,5000);  
63.                     m.work();  
64.                     Prop1 = new Pro("李四","022",8000.00);  
65.                     p1.work();  
66.     
67.           }  
68.  }  


点评

谢谢楼主分享,内容很丰富。  发表于 2014-3-22 21:00
谢谢楼主分享,内容很丰富。  发表于 2014-3-22 20:56

评分

参与人数 1技术分 +2 收起 理由
何伟超 + 2

查看全部评分

3 个回复

倒序浏览
支持哈 .......
通过继承抽象实现多态,后期绑定,可以为将来要实现的东西做好接口,实现重用性,
模板设计模式也要用到抽象类和抽象方法...
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马