第一次,写这个,没有把图片放上来,有兴趣的可以点击连接看原文 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. 获取FIle路径下所有文件的地址和名称

    public static void getFileName(File[] files) { String address=""; if (files != null)// 先判断 ...

  2. How-to-uninstall-Meteor // install Meteor manually

    How-to-uninstall-Meteor :  http://www.uninstallapp.com/article/How-to-uninstall-Meteor-.html install ...

  3. sublime text3 输入中文的解决方法

    1. 下载我们需要的文件,打开终端 ,输入: git clone https://github.com/lyfeyaj/sublime-text-imfix.git 2. 将下载的文件解压之后,移到当 ...

  4. ios 导航栏的显示和隐藏切换

    从简单的一个没有导航栏的界面A push到另一个有导航栏的界面 B,在界面A的逻辑中加入下面逻辑: 屏幕快照 2016-03-30 上午10.35.24.png 这样完美的处理了这个场景变换需求.引起 ...

  5. MyEclipse2015配置Tomcat方法----》myeclipse2015

    1.打开Myeclipse2015,进入偏好设置window-perference,找到下图箭头指向的地方 2.点击Add按钮进入下面界面 3.点击next进入下面界面 4.选择tomat  选择JR ...

  6. 【leetcode】Max Points on a Line

    Max Points on a Line 题目描述: Given n points on a 2D plane, find the maximum number of points that lie ...

  7. AutoMapper搬运工之自定义类型转换

    前言 最近还挺忙,还有点累,一直都没更新了,实在是懒呀.正题之前先说点别的,最近公司要扩张了,需要大量开发,领导说推荐有钱可以拿,如此好机会,我就趁机做个广告.ShippingRen.com招募.NE ...

  8. iOS ARC 下的单例模式

    #import <Foundation/Foundation.h> @interface RYSingleExample : NSObject<NSCopying> +(ins ...

  9. Struts2 日期类型转换

    针对日期类java.util.Date进行类型转换,要求客户端使用"yyyy-MM-dd","yyyy/MM/dd"中的任意一种输入,并以"yyyy- ...

  10. 动态添加LinearLayout的高度

    WindowManager wm = (WindowManager) getContext() .getSystemService(Context.WINDOW_SERVICE); int width ...