1、抽象类。

  java常规类中,有些方法并不是固定的,而是在不同的情况下有不同的实现的,比如一个人,在公司要工作,在学校要学习,在食堂要吃饭,但是这个人还有相同的地方,比如不论在哪里都要呼吸,看,挺,所有可以把变化的和不变化的分离开。

  正常情况下的类如下:

  

package org;

public class Person {
public Person action(){
System.out.println("在公司工作");
return this;
} public Person look(){
System.out.println("我就看看!");
return this;
}; public Person breath(){
System.out.println("我随时在呼吸!");
return this;
} public Person listen(){
System.out.println("我很警惕,随时耳听八方!");
return this;
} }

  但是这里边的action方法可能随着环境的变化做出不一样的动作,所有就可以给抽象出来,变成一个抽象的父类

  

package org;

public abstract class Person {
public abstract Person action(); public Person look(){
System.out.println("我就看看!");
return this;
}; public Person breath(){
System.out.println("我随时在呼吸!");
return this;
} public Person listen(){
System.out.println("我很警惕,随时耳听八方!");
return this;
} }

  抽象类和接口类似,都不能有实例。例如:

 

package org;

public abstract class TestIfCanBeInstance {
} class MyTest{
public static void main(String[] args) {
//new TestIfCanBeInstance();'TestIfCanBeInstance' is abstract; cannot be instantiated
}
}

  

  类中的静态方法没有实现,需要在其子类进行实现。类中有抽象方法,这个类也必须是抽象的。

  抽象类的使用方法如下:

 class Test{
public static void main(String[] args) {
new Person(){
@Override
public Person action() {
System.out.println("我在食堂要吃饭!!!");
return this;
}
}.action().look().breath().listen();
}
}

  可以看到,抽象类隐藏了其他方法的实现,也正好符合了java封装的特性。

2、接口

  接口就是一个完全抽象的类,本身可以不提供任何实现(当然jdk8以后出现的接口的默认实现),接口规定了实现这个接口的类改有的模型,接口最伟大的是实现了多继承。

  接口的声明利用关键字interface,声明如下:

  

package org;

public interface Shape {
void area(); void lenght();
}

  接口的方法默认是public static的,你并不需要将这个声明加上,如果你想将方法声明为private,Modifier 'private' not allowed here。因为接口里的私有声明没有任何意义。

  接口也可以像抽象类一样,引用父类,指向一个实现了这个父类的子类。当我们操作的不是一个具体的方法,而是父类,实现的类之间的解耦和实现的封装化。

  java接口可以通过继承进行扩展。

  接口中的域默认是public static final的,原来会用接口存储一些我们用的变量,后可以用更强大的枚举类代替。

  接口的继承,如果有两个接口的签名方法一样,这对接口的使用没有什么影响。但是如果两个方法名字相同,但是返回值不一样,这就会导致子类的模糊,会发生编译器异常。

java接口深入的更多相关文章

  1. java接口调用——webservice就是一个RPC而已

    很多新手一听到接口就蒙逼,不知道接口是什么!其实接口就是RPC,通过远程访问别的程序提供的方法,然后获得该方法执行的接口,而不需要在本地执行该方法.就是本地方法调用的升级版而已,我明天会上一篇如何通过 ...

  2. java 接口的作用和好处

    1.java 接口的作用 http://blog.csdn.net/hack_bug/article/details/7634737 2.一位Java大牛的回答 很多JAVA初级程序员对于接口存在的意 ...

  3. java接口

    一.定义 Java接口(Interface),是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为( ...

  4. java接口的嵌套

    java接口 1.接口中定义的变量默认是public static final 型,且必须给其初值,所以实现类中不能重新定义,也不能改变其值 2.接口中的方法默认都是 public abstract ...

  5. java 接口和抽象类的区别

    java 接口和抽象类的区别抽象类:1.含有抽象方法的类一定为抽象类,反过来抽象类,不一定含有抽象方法:2.抽象类必须用abstract来进行定义,抽象方法也必须用abstract来进行定义:3.抽象 ...

  6. java 接口(上)

    1.接口中的方法都是抽象方法.而普通的抽象类里面不一定都是抽象方法.抽象类中必须有抽象方法,同时也可以有非抽象方法.继承抽象父类的子类中,如果依然有抽象方法,那么这个子类也是抽象类.即只要类中有抽象方 ...

  7. java接口和抽象类

    关于接口 1.创建一个接口,需要使用interface关键字. 2.实现一个接口,需要使用implements关键字. 3.接口的成员属性都是静态常量(默认public static final). ...

  8. python面向对象进阶 反射 单例模式 以及python实现类似java接口功能

    本篇将详细介绍Python 类的成员.成员修饰符.类的特殊成员. 类的成员 类的成员可以分为三大类:字段.方法和特性. 注:所有成员中,只有普通字段的内容保存对象中,即:根据此类创建了多少对象,在内存 ...

  9. 初探设计:Java接口和抽象类何时用?怎么用?

    今天犯了个错: “接口变动,伤筋动骨,除非你确定只有你一个人在用”.哪怕只是throw了一个新的Exception.哈哈,这是我犯的错误. 一.接口和抽象类 类,即一个对象. 先抽象类,就是抽象出类的 ...

  10. OpenCV4Android开发之旅(一)----OpenCV2.4简介及 app通过Java接口调用OpenCV的示例

    转自:  http://blog.csdn.net/yanzi1225627/article/details/16917961 开发环境:windows+ADT Bundle+CDT+OpenCV-2 ...

随机推荐

  1. POJ-2796 & 2019南昌邀请赛网络赛 I. 区间最大min*sum

    http://poj.org/problem?id=2796 https://nanti.jisuanke.com/t/38228 背景 给定一个序列,对于任意区间,min表示区间中最小的数,sum表 ...

  2. jmeter简单得压力测试

    Jmeter教程 简单的压力测试 Jmeter是一个非常好用的压力测试工具.  Jmeter用来做轻量级的压力测试,非常合适,只需要十几分钟,就能把压力测试需要的脚本写好. 阅读目录 什么是压力测试 ...

  3. for in 中的index

    自己学艺不精... 数据是个对象,想要里面的key 原来 for (item, index) in items 中的index 就是key

  4. Centos6与Centos7安装和使用htop

    Centos6 安装 rpm -ivh https://mirrors.tuna.tsinghua.edu.cn/epel/6/x86_64/epel-release-6-8.noarch.rpm r ...

  5. Oracle使用

    Oracle数据库首先必须在服务器端安装,安装完成后在DBCA中创建数据库,然后在Net Configuration Assistant中配置监听程序和本地Net服务名.然后安装本地Oracle客户端 ...

  6. index.html jquery

    index.html   <!DOCTYPE html> <html lang="en"> <head> <meta charset=&q ...

  7. .NET+MySql 踩坑1

    换成MySql数据库后,遇到的问题: 已解决,但不理解的问题: var test = db.test; 报如下图错误: 加上DefaultIfEmpty()则解决. var test = db.Tes ...

  8. Linux 安装 Rabbit MQ

    安装socat yum -y install socat 下载erlang软件包,本文使用erlang-19.0.4版本,下面给出下载链接 wget http://www.rabbitmq.com/r ...

  9. Linux系统vim几个常见配置

    1.编辑配置文件:vim ~/.vimrc 2.配置文件写入以下内容   偷懒就截图上传了

  10. 回文的范围——算法面试刷题2(for google),考察前缀和

    如果一个正整数的十进制表示(没有前导零)是一个回文字符串(一个前后读取相同的字符串),那么它就是回文.例如,数字5, 77, 363, 4884, 11111, 12121和349943都是回文. 如 ...