1.接口的诞生:
学过c,c++的应该知道C语言是面向过程的,C++是面向对象的,面向对象的一个特征:多态;(面向对象的语言都支持的三个概念:封装,继承,多态),C++实现多态的方法就是继承,C++支持一个类继承多个类,但对于Java语言其中有一个特点就是只能继承一个类,不能继承多个类,而为了解决这个问题,接口就产生了。因此,接口的一个特性就是一个类可以实现多个接口。
2.什么是接口:
接口这种技术主要用来描述类具有什么功能,而并不给出每个功能的具体实现。(好比喻工作时间表,规定了你在某时刻应该干什么,类实现接口相当于,你在这时刻干了什么)
类实现接口使用:implements 接口的格式:
[public]interface 接口名称 [extends 父接口列表]
{
[public ] [static][final] 数据类型 成员变量=常量;
[public][abstract]返回值的数据类型 方法名(参数表);
}
2.1 接口的举例
public interface Cat {
public static final int number=100;
public abstract void run();
// public default void print()
// {
// System.out.println("在接口中实现默认的方法");
// }
}
3 接口的特性
- 接口和抽象类一样不能被实例化。cat=new Cat()//error 然而,接口不能构造接口的对象却能声明接口的变量。如Cat c。
- 接口中的变量时静态常量 如果写int number=100;默认的是public static final ;接口中的方法时抽象的方法,不写默认是public abstract。
- jdk8 接口可以实现默认的方法如
public default void print()
{
System.out.println("在接口中实现默认的方法");
}
- 接口可以继承多个接口(extends)如:
public interface Name extends Me,Me2{
public static final int i=10;
abstract public void add();
}
5.实现接口的类必须要覆写接口中的全部抽象方法。 6.接口没有构造函数的
4 接口的实现
1 对于要实现接口的类,可以用implements 关键字来实现接口。 例子: interface1接口:
public interface Interface1 {
public final static String name="interface1";
public abstract void print1();
public default void print()
{
System.out.println("interface1的实现默认方法");
}
}
实现接口的类:
public class InterfaceImpl implements Interface1{
@Override
public void print1() {
// TODO Auto-generated method stub
System.out.println("impl interface1");
}
public static void main(String[] args) {
InterfaceImpl impl=new InterfaceImpl();
//重写接口的方法
impl.print1();
//接口的默认方法
impl.print();
//接口的名称
System.out.println(Interface1.name);
}
}
运行结果:
impl interface1
interface1的实现默认方法
interface1
2 接口的对象可以利用子类对象的向上转型进行实例化。(如果接口对象要调用子类自己的方法,必须强制类型转换。否则接口对象只能调用自己定义的方法在子类的实现。)
public class InterfaceImpl implements Interface1{
public void add()
{
System.out.println("子类自己的方法");
}
@Override
public void print1() {
// TODO Auto-generated method stub
System.out.println("impl interface1");
}
public static void main(String[] args) {
// InterfaceImpl impl=new InterfaceImpl();
// //重写接口的方法
// impl.print1();
// //接口的默认方法
// impl.print();
// //接口的名称
// System.out.println(Interface1.name);
Interface1 inter1=new InterfaceImpl();
inter1.print();
inter1.print1();
System.out.println(Interface1.name);
//inter1.add();//error
((InterfaceImpl) inter1).add();
}
}
结果:
interface1的实现默认方法
impl interface1
interface1
子类自己的方法
接口的继承
接口继承(extends): interface2 :
public interface Interface2 {
public final static String name="interface2";
public abstract void print2();
public default void print()
{
System.out.println("interface2的实现默认方法");
}
}
interface3:
public interface Interface3 {
public final static String name="interface3";
public abstract void print3();
public default void print()
{
System.out.println("interface3的实现默认方法");
}
}
interface1:
public interface Interface1 extends Interface2,Interface3{
public final static String name="interface1";
public abstract void print1();
public default void print()
{
System.out.println("interface1的实现默认方法");
}
}
实现interface1的类:
public class InterfaceImpl implements Interface1{
public void add()
{
System.out.println("子类自己的方法");
}
@Override
public void print1() {
// TODO Auto-generated method stub
System.out.println("impl interface1");
}
public static void main(String[] args) {
// InterfaceImpl impl=new InterfaceImpl();
// //重写接口的方法
// impl.print1();
// //接口的默认方法
// impl.print();
// //接口的名称
// System.out.println(Interface1.name);
Interface1 inter1=new InterfaceImpl();
inter1.print();
inter1.print1();
System.out.println(Interface1.name);
//inter1.add();//error
((InterfaceImpl) inter1).add();
}
@Override
public void print2() {
// TODO Auto-generated method stub
System.out.println("interface2");
}
@Override
public void print3() {
// TODO Auto-generated method stub
System.out.println("interface3");
}
}