第一次,写这个,没有把图片放上来,有兴趣的可以点击连接看原文 http://note.youdao.com/noteshare?id=aecbd52b9240f23c0954e8086b848a17
一:抽象类 
 java的抽象类用关键字abstract来进行声明。抽象类只关心它的子类是否具有某种功能,并不关心功能的具体实现,功能的具体实现是由子类来负责实现的。
抽象类不能被实例化(既不能new 出来),只能用作派生类的基类而存在。
  抽象类的定义规则如下:
1.抽象类必须用abstract关键字来修饰;抽象方法也必须用abstract来修饰。
2.抽象方法只需声明,而无需实现。
3.抽象方法不能被实例化。
4.当一个类中拥有抽象方法时,则该类必须被声明为抽象类。
5.当一个子类继承抽象类时,他必须实现实现父类的所有抽象方法,反则它也只是一个抽象类,还是不能被实例化。
 
下面举例子说明:
package 抽象类;
 
/**
 * 定义一个抽象类People
 * 
 *
 */
public abstract class People {
    public void say(){
        System.out.println("具体方法");
    }
 
    /**
     * 定义一个抽象方法 职业
     */
    public abstract void profession();
}
 
上面代码创建了一个抽象类,分别有一个抽象方法 profession();跟具体方法say()。
 
若定义一个子类继承自People类,则必须实现say()方法,否则还只是抽象类。
(1)实现了所有父类的抽象方法。
 
(2)没有实现父类的所有方法的情况。(必须加关键字声明为抽象类)
抽象类不能被实例化(不然会报错)
 
二:接口
  java只支持单继承,利用接口可以实现多继承的一种效果。通常,接口中只定义了抽象方法,规划出类的共同行为,而把具体的实现留给具体的类。
接口用关键字interface来进行声明,接口是抽象方法和常量值定义的集合,从本质上讲,接口是一种特殊的抽象类,这种抽象类只包含有常量和方法的定义,而没有变量和方法的实现(不过可以在接口里面实现静态方法).
接口的常量定义部分有public、static和final属性。在接口中声明的方法具有public和abstract属性(接口的方法可以不用关键字abstrac进行声明).
接口的实现由类来实现,类通过关键字implements声明自己使用一个或多个接口。所谓实现接口,就是实现接口中声明的方法。
一个类可以实现多个接口,但必须实现所继承接口的全部方法,否则也是要被声明为抽象类。如下图所示。
上图也可以反映出接口中定义的常量具有static、final等属性,当然也是具有public属性的。
此外,接口还可以多继承。
 
三:补充
其实我觉得完全可以将抽象类,接口跟匿名类合在一起讲,匿名类是不能有名称的类,所以没办法引用他们。必须在创建时作为new语句的一部分来实现他们。
作为一个自学者,其实刚开始对匿名类这东西很不理解(当然现在也不一定完全理解了,只是个人的理解)。我觉得匿名类就是对原有的类或接口进行拓展和实现。所创建的相当于原有类的子类,所以你用上转型对象去接收的时候会发现用上转型对象调用不到匿名类里面自己新增的成员变量和方法。
匿名类使用最多的我想大概就是swing窗体的时候了吧。在为控件注册点击事件的时候常常用到匿名类。如:
这边就使用匿名类实现了接口WindowListener来注册窗体的相关事件。注意的是这边是实现接口所以必须实现接口的全部方法,否则根本new 不出来(因为是抽象类)。这样会变得很麻烦,因为我们要重写这个接口的全部未实现的方法。因此,这边就引入了事件适配器,如WindowAdapter。事件适配器里面已经有了相关方法的空实现(方法体里面什么都没有,不等同于抽象类),因此我们只需要重写我们关心的某几个方法。
 
在自学的路上,遇到好多挫折,曾经也想放弃但又舍不得放弃。我坚信好记性不如烂笔头,也希望和大家共同进步。第一次写这种,希望大家能多多指出我的错误,谢谢大家。新的一年,继续前进。
 
 
 
 
 

浅谈java抽象类和接口的更多相关文章

  1. 浅谈Java抽象类

    什么是抽象类?这名字听着就挺抽象的,第一次听到这个名字还真有可能被唬住.但是,就像老人家所说的,一切反动派都是纸老虎,一切有着装x名字的概念也是纸老虎.好吧,我们已经从战略上做到了藐视它,现在就要战术 ...

  2. 浅谈Java中接口与抽象类的异同

    浅谈Java中接口与抽象类的异同 抽象类和接口这两个概念困扰了我许久,在我看来,接口与抽象类真的十分相似.期间也曾找过许许多多的资料,参考了各路大神的见解,也只能是简简单单地在语法上懂得两者的区别.硬 ...

  3. 浅谈Java接口(Interface)

    浅谈Java接口 先不谈接口,不妨设想一个问题? 如果你写了个Animal类,有许多类继承了他,包括Hippo(河马), Dog, Wolf, Cat, Tiger这几个类.你把这几个类拿给别人用,但 ...

  4. 浅谈JAVA集合框架

    浅谈JAVA集合框架 Java提供了数种持有对象的方式,包括语言内置的Array,还有就是utilities中提供的容器类(container classes),又称群集类(collection cl ...

  5. 浅谈Java的集合框架

    浅谈Java的集合框架 一.    初识集合 重所周知,Java有四大集合框架群,Set.List.Queue和Map.四种集合的关注点不同,Set 关注事物的唯一性,List 关注事物的索引列表,Q ...

  6. 浅谈Java的默认和静态方法

    目录 浅谈Java的默认和静态方法 Java新增默认方法有啥用 Java新增的静态方法有啥用 浅谈Java的默认和静态方法 允许在接口中声明默认方法和静态方法,是JDK1.8新增的特性.存在即合理,两 ...

  7. 浅谈Java中的深拷贝和浅拷贝(转载)

    浅谈Java中的深拷贝和浅拷贝(转载) 原文链接: http://blog.csdn.net/tounaobun/article/details/8491392 假如说你想复制一个简单变量.很简单: ...

  8. !! 浅谈Java学习方法和后期面试技巧

    浅谈Java学习方法和后期面试技巧 昨天查看3303回复33 部落用户大酋长 下面简单列举一下大家学习java的一个系统知识点的一些介绍 一.java基础部分:java基础的时候,有些知识点是非常重要 ...

  9. 浅谈Java中的深拷贝和浅拷贝

    转载: 浅谈Java中的深拷贝和浅拷贝 假如说你想复制一个简单变量.很简单: int apples = 5; int pears = apples; 不仅仅是int类型,其它七种原始数据类型(bool ...

随机推荐

  1. angularjs向后台传参,后台收不到数据

    angularjs中封装了一个$http服务,用来请求远程资源 参见:HTTP API 其中封装过的$http.post和$http.get使用起来比较方便 后台是php,用$_POST['name' ...

  2. C#中的日期处理函数

    C#中的日期处理函数 //2013年4月24日 this.TextBox6.Text = System.DateTime.Now.ToString("D"); //2013-4-2 ...

  3. ++i vs i++

    [分析] i++与++i哪个效率更高? (1)在内建数据类型的情况下,效率没有区别: (2)在自定义数据类型Class的情况下,++i效率更高! 自定义数据类型的情况下:++i返回对象的引用:i++总 ...

  4. linux 使用 nvidia 的 gpu

    第一种方法: [Wizard@Wizard ~]$ nvidia-detect kmod-nvidiaOptimus hardware detected: An Intel display contr ...

  5. js中替换返回json中的空格为 

    使用.replace(/\s/g, ' ');来替换空格.在IE中 不起作用,可以指定编码将字体设置为:{font-family: Simsun;}

  6. 管理node的版本

    检查当前node的版本 node -v 清除npm cache sudo npm cache clean -f 安装n模块 sudo npm install -g n 切换到别的版本,比如 v4.4. ...

  7. ChannelPipeline

    Netty的ChannelPipeline和ChannelHandler机制类似于Servlet和Filter过滤器,这类拦截器实际上是职责链模式的一种变形,主要是为了方便事件的拦截和用户业务逻辑的定 ...

  8. 《DSP using MATLAB》示例Example5.10

    代码: n = 0:10; x = 10*(0.8) .^ n; [xec, xoc] = circevod(x); %% -------------------------------------- ...

  9. XAMPP PHPSTORM XDEBUG 配合使用

    1.xdebug 配置 安装完xampp 进入 php.ini [XDebug]zend_extension = "C:\xampp\php\ext\php_xdebug.dll" ...

  10. 【oracle】oracle表结构导出到Word

    因为需要写数据库文档,所以需要把数据库里边的表结构在word中用表格列出来,之前一直用powerdesigner,感觉有些麻烦,后来在网上找到了一段sql语句,经测试完全符合我的需求,不敢独享,语句如 ...