第一次,写这个,没有把图片放上来,有兴趣的可以点击连接看原文 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. getRealPath("/")弃用

    用request.getSession().getServletContext().getRealPath("/");替换getRealPath("/"):

  2. jquery手写实现单页滚动导航

    效果说明:点击tab导航,页面滑动到下方相应板块.并且当页面通过鼠标滚动下去时,上方的tab也可以自动切换到当前位置的板块上. 代码说明:js中对两个动作分别写,一个是tab点击下滑到相应板块位置:一 ...

  3. GET和POST

    Ajax与Comet 1. Ajax Asynchronous Javascript+xml :能够向服务器请求额外的数据而无需卸载页面. Ajax技术的核心是XMLHttpRequest 对象(简称 ...

  4. 最小生成树的Kruskal算法实现

    最近在复习数据结构,所以想起了之前做的一个最小生成树算法.用Kruskal算法实现的,结合堆排序可以复习回顾数据结构.现在写出来与大家分享. 最小生成树算法思想:书上说的是在一给定的无向图G = (V ...

  5. Word中一些问题解决

    word图片不显示或显示不全怎么办? http://jingyan.baidu.com/article/0f5fb099c5cb7a6d8334ea06.html

  6. Ubuntu菜鸟入门(二)—— apt认知,且完善语言安装包

    一  语言安装包安装 1  原因 虽然安装的中文版,但是由于安装包很小,所以汉化的不够完全,所以要安装后,再下载语言包进行安装 2  方法 二  apt--软件包管理器 1   软件源 (1) 介绍 ...

  7. JAVA Day9

    1.StringBuffer类 优点: 内存的管理! StringBuffer: String 增强版 StringBuffer sb = new StringBuffer(); StringBuff ...

  8. 前台json 的一些 处理 (转)

    JS解析json数据并将json字符串转化为数组的实现方法 转自(http://www.jb51.net/article/32795.htm) <!DOCTYPE HTML PUBLIC &qu ...

  9. TScrollBox的用法 滚动事件

    //滚轮事件:ScrollBox1: TScrollBox; procedure TfrmReleateGQAccount.ScrollBox1MouseWheel(Sender: TObject; ...

  10. linux中grep命令详解

    http://jingyan.baidu.com/article/76a7e409e72777fc3b6e158a.html