Java面向对象之接口interface 入门实例
一、基础概念
(一)接口可以简单的理解为,是一个特殊的抽象类,该抽象类中的方法都是抽象的。
接口中的成员有两种:1.全局常量 2.抽象方法
定义接口用关键字interface,接口中的成员都用固定的修饰符public来修饰。
(二)接口的特点:
1、接口不可以实例化。
2、接口的子类必须覆盖接口中的所有抽象方法后,才可以实例化。否则该子类是抽象类。
3、接口是用来被实现的。
(三)接口解决的问题:
1.因为多继承调用的不确定性,java中是不直接支持多继承的,但可以通过接口来解决,将多继承转换成多实现。
2.因为子类具备所属的父类体系的基本功能后,还想扩展一些其他功能。可以通过接口来完成。
3.避免单继承的局限性。一个类继承另一个类的同时,还可以实现多个接口。
(四)接口的思想:
1.接口的出现扩展了功能。
2.接口的出现其实就是暴露出来的规则。
3.接口的出现降低了耦合性。(用于解耦)
4.接口的出现,一方在使用接口,一方在实现接口。
(五)类与接口的区别:
1.类与类之间的关系是继承关系。
2.类与接口之间的关系是实现关系。
3.接口与接口的关系是继承关系,而且可以多继承。
4.抽象类中可以定义抽象和非抽象方法。子类可以直接使用,或者覆盖使用。接口中定义都是抽象方法,必须实现后才能使用。
5.类用于描述是事物的共性基本功能,接口用于定义的是事物的额外功能。
二、实例代码(一)
1.定义接口子类SubInter_1,进行接口InterA的实现
2.定义接口子类SubInter_2,进行接口InterA接口和InterB的多实现
3.定义接口子类SubInter_3,继承Fu类还进行接口InterA的实现
3.定义接口子类SubInter_4,继承Fu类还进行接口InterA和InterB的多实现
//定义父类Fu
class Fu
{
public void show1()
{
System.out.println("Fu show1 ......");
}
} //定义接口InterA
interface InterA
{
public static final int num1 = 4; //全局常量
public abstract void show2(); //抽象方法
} //定义接口InterB
interface InterB
{
public static final int num2 = 6;
public abstract void show3();
} //定义接口子类SubInter_1,进行实现
class SubInter_1 implements InterA//子类SubInter1实现 InterA接口
{
public void show2()
{
System.out.println("SubInter_1 InterA show2 ......");
}
} //定义接口的子类SubInter_2,进行多实现
class SubInter_2 implements InterA,InterB//用子类SubInter2 多实现 InterA接口和Inter接口
{
public void show2()
{
System.out.println("SubInter_2 InterA show2 ......");
}
public void show3()
{
System.out.println("SubInter_2 InterB show3 ......");
}
} //SubInter_3类继承了Fu类的基本功能,还实现了InterA接口的基本功能。
class SubInter_3 extends Fu implements InterA
{
public void show2()
{
System.out.println("SubInter_3 InterA show2 ......");
} } //SubInter_4类继承了Fu类的基本功能,还实现了InterA接口和InterB接口的基本功能。
class SubInter_4 extends Fu implements InterA,InterB
{
public void show2()
{
System.out.println("SubInter_3 InterA show2 ......");
} public void show3()
{
System.out.println("SubInter_3 InterB show3 ......");
}
} class InterfaceDemo1
{
public static void main(String[] args)
{
//SubInter_1实例化 s1
SubInter_1 s1 = new SubInter_1();
System.out.println(s1.num1);
System.out.println(SubInter_1.num1);
s1.show2(); //SubInter_2实例化 s2
SubInter_2 s2 = new SubInter_2();
System.out.println(s2.num1);
System.out.println(s2.num2);
System.out.println(SubInter_2.num1);
s2.show2();
s2.show3(); //SubInter_3实例化 s3
SubInter_3 s3 = new SubInter_3();
System.out.println(s3.num1);
System.out.println(SubInter_3.num1);
s3.show1();
s3.show2(); //SubInter_4实例化 s4
SubInter_4 s4 = new SubInter_4();
System.out.println(s4.num1);
System.out.println(s4.num2);
System.out.println(SubInter_4.num2);
s4.show1();
s4.show2();
s4.show3();
}
}
代码执行
三、实例代码(二)
1.定义接口InterB,继承接口InterA。并实现InterB
2.定义接口InterD,继承接口InterB和接口InterC.并实现InterD
//定义接口InterA
interface InterA
{
public static final int num = 4;
public abstract void show1();
} //定义接口InterB,继承接口InterA
interface InterB extends InterA
{
public abstract void show2();
} //定义接口InterC
interface InterC
{
public abstract void show3();
} //定义接口InterD,继承接口InterB和接口InterC
interface InterD extends InterB,InterC
{
public abstract void show4();
} //定义接口子类SubInter,进行实现
class SubInter_1 implements InterB
{
public void show1()
{
System.out.println("SubInter_1 InterA show1 ......");
} public void show2()
{
System.out.println("SubInter_1 InterB show2 ......");
}
} //定义接口子类SubInter,进行实现
class SubInter_2 implements InterD
{
public void show1()
{
System.out.println("SubInter_2 InterA show1 ......");
} public void show2()
{
System.out.println("SubInter_2 InterB show2 ......");
} public void show3()
{
System.out.println("SubInter_2 InterC show3 ......");
} public void show4()
{
System.out.println("SubInter_2 InterD show4 ......");
}
} class InterfaceDemo2
{
public static void main(String[] args)
{ //SubInter_1实例化s1
SubInter_1 s1 = new SubInter_1();
System.out.println(s1.num);
s1.show1();
s1.show2(); //SubInter_2实例化s2
SubInter_2 s2 = new SubInter_2();
System.out.println(s1.num);
s2.show1();
s2.show2();
s2.show3();
s2.show4();
}
}
代码执行
四、实例代码(三)
接口Inter中有4个方法,子类只想用其中的一个方法。
用DemoA类实现接口Inter中的所有方法进行解决。
interface Inter
{
public abstract void show1();
public abstract void show2();
public abstract void show3();
public abstract void show4();
} //为了方便创建Inter接口的子类对象,先创建一个DemoA类实现接口Inter。
//因为Demo类创建对象没有意义。所以将该类抽象。
abstract class DemoA implements Inter
{
public void show1(){}
public void show2(){}
public void show3(){}
public void show4(){}
} class DemoB extends DemoA
{
public void show1()
{
System.out.println("Inter show1 ......");
}
} class InterfaceDemo3
{
public static void main(String[] args)
{
DemoB s1 = new DemoB();
s1.show1();
}
}
代码运行
Java面向对象之接口interface 入门实例的更多相关文章
- JavaSE入门学习21:Java面向对象之接口(interface)(二)
一接口实现的多态 在上一篇博文:JavaSE入门学习20:Java面向对象之接口(interface)(一)中提到了接口的实现存在多态性,那么 这一篇主要就要分析接口实现的多态. 实例一 Test.j ...
- JavaSE入门学习20:Java面向对象之接口(interface)(一)
一Java接口 接口(英文:interface)是抽象方法和常量值的集合,在Java编程语言中是一个抽象类型,接口通常以interface来声 明.类是一种详细实现体.而接口定义了某一批类所须要遵守的 ...
- Java面向对象之继承extends 入门实例
一.基础概念 (一)继承的好处: 1.继承:提高了代码的复用性. 2.让类与类之间产生了关系,给多态这个特征提供了前提. (二)继承的种类: 1.单继承:一个类只能有一个父类. 2.多继承:一个类可以 ...
- Java面向对象之抽象类abstract 入门实例
一.基础概念 抽象事物,是若没有具体的信息可以描述这个事物,这个事物可以称为抽象事物. 抽象类,是不断的向上抽取而来.抽取方法声明而不确定具体的方法内容.由不同的子类来完成具体的方法内容. (一)抽象 ...
- Java面向对象之关键字final 入门实例
一.基础概念 1.关键字final可以修饰类.函数.变量. 2.关键字final修饰的类不可以被继承. 3.关键字final修饰的方法不可以被覆盖. 4.关键字final修饰的变量是一个常量,只能被赋 ...
- Java面向对象之关键字super 入门实例
一.基础概念 (一)super关键字 super关键字的用法和this相似.this代表的是当前对象.super代表的是父类中内存空间. 子父类中是不会出现同名属性的情况. (二)继承中.成员变量问题 ...
- Java面向对象之关键字static 入门实例
一.基础概念 静态关键字 static 是成员修饰符,直接用于修饰成员. (一)特点: 1.被静态修饰的成果,可以直接被类名所调用. 2.静态成员优先于对象存在. 3.静态成员随着类的加载而加载.随着 ...
- Java面向对象之关键字this 入门实例
一.基础概念 1.关键字this是指:哪个对象调用this所在的函数.this就指向当前这个对象. 2.用法: (1).this关键字可以解决:构造函数私有化问题. 注意:构造函数只能被构造函数调用, ...
- Java面向对象:接口
Java面向对象之接口 什么是接口:接口是一种规范和标准,他们可以约束类的行为,是一些方法特征的集合 语法: [修饰符] interface 接口名 extends 父接口1,夫接口2....... ...
随机推荐
- 转:Python正则表达式指南
本文介绍了Python对于正则表达式的支持,包括正则表达式基础以及Python正则表达式标准库的完整介绍及使用示例.本文的内容不包括如何编写高效的正则表达式.如何优化正则表达式,这些主题请查看其他教程 ...
- 引用WebService出现错误
在引用WebService作为服务引用的时候,由于VS生成时生成了两个入口点,导致出现 引发的异常:“System.Windows.Markup.XamlParseException”(位于 Pres ...
- 微信开发准备(四)--nat123内网地址公网映射实现
转自:http://www.cuiyongzhi.com/post/37.html 在前面几篇中我们一直说的开发准备工作主要是基于开发框架上的,这里我们说的就逐渐接近开发过程中的实体操作了,如果你之前 ...
- mahout in Action2.2-给用户推荐图书(2)-分析对用户推荐书目的结果
2.2.3 Analyzing the output 在之前的程序运行结果中我们得到的结果输出是: RecommendedItem [item:104, value:4.257081] 程序要求选择一 ...
- OSCache-JSP页面缓存(2)
如果在jsp中使用如下标签 <cache:cache key="foobar" scope="session"> some jsp content ...
- laravel 模型关联之(多对多)
多对多 多对多就相当于一个专题Topic有多个文章,但是这多个文章又属于多个专题, 而且多对都必须有一个表是他们之间的关联关系表PostTopic Post表和Topic表之间没有直接的关联,而且通过 ...
- c++ 门面模式(Facade)
门面模式是比较常用的一种设计模式,我们可能在无意中就会使用,门面模式就是用一个门面类来处理子系统的复杂关系,门面类简单的Api接口供客户端调用.用一个简单的演播室来表示. #include <i ...
- Luogu 3594 [POI2015]WIL-Wilcze doły
简单题. 考虑没有修改数字的条件的限制,我们直接用双指针扫描就可以计算出答案了. 然后考虑加入修改数字的条件,只要用单调队列维护出当前两个指针表示的区间中长度为$d$的一段区间的最大值,用总和减掉这个 ...
- Entity Framework在不同数据库下的配置
http://blog.csdn.net/weiky626/article/details/17068593 http://blog.csdn.net/niewq/article/details/41 ...
- Requests接口测试(二)
requests安装先看下怎么安装requests, 执行以下命令: pip install requests 安装好后如何导入requests模块呢? 如下所示: import requests 基 ...