格式:
interface 接口名{}
接口中的成员修饰符是固定的。
•成员常量:public static final
•成员函数:public abstract
•发现接口中的成员都是public的。
接口的出现将“多继承”通过另一种形式体现出来,即“多实现”。
接口的特点
l接口是对外
暴露的规则。
l接口是程序的
功能扩展。
l接口的出现
降低耦合性。
l接口可以用来
多实现。
l类与接口之间是实现关系,而且类可以继承一个类的同时实现多个接口。
l接口与接口之间可以有继承关系。
接口与抽象类
共 性: | 都是不断抽取出来的抽象的概念 |
区别 1: | 抽象类体现继承关系,一个类只能单继承 接口体现实现关系,一个类可以多实现 |
区别 2: | 抽象类是继承,是 "is a "关系 接口是实现,是 "like a"关系 |
区别 3: | 抽象类中可以定义非抽象方法,供子类直接使用 接口的方法都是抽象,接口中的成员都有固定修饰符 |
/*
如果一个抽象类的方法都是抽象的,
这时可以将抽象类用另一种形式来体现。就是接口。
接口定义的关键字就是 interface
*/
/*
abstract class AbsDemo
{
abstract void show();
abstract void method();
}
*/
interface InterDemo
{
/*
接口中成员的定义:
常见成员有两种:
1,全局常量。
2,抽象方法。
接口中的成员都是public的。
接口:
子类必须实现了接口中所有的抽象方法后,子类才可以实例化。
否则,该子类是一个抽象类。
*/
public static final int X = 3;
public abstract void method1();
public abstract void method2();
}
class Demo implements/*实现*/ InterDemo
{
public void method1()
{
}
public void method2()
{
}
}
class InterfaceDemo
{
public static void main(String[] args)
{
Demo d = new Demo();
System.out.println(d.X);
System.out.println(Demo.X);
System.out.println(InterDemo.X);
}
}
/*
接口的好处:是将多继承进行改良,用多实现进行体现。
一个类只能继承一个类,
但是一个类可以实现多个接口。
另一个体现。
一个类在继承另一个类的同时,还可以实现多接口。
接口的出现避免了单继承的局限性。
*/
interface DemoA
{
public void show();
}
interface DemoB
{
public void show();
}
class DemoC
{
}
class Demo extends DemoC implements DemoA,DemoB//多实现。
{
public void show(){}
}
interface A
{
void show();
}
interface B
{
void show();
}
interface C extends B,A//接口之间存在着多继承。
{
}
class InterfaceDemo2
{
public static void main(String[] args)
{
System.out.println("Hello World!");
}
}
/*
抽象类中没有抽象方法的举例。
*/
interface Inter
{
public void method1();
public void method2();
public void method3();
}
//没有抽象方法的抽象类。
abstract class Test implements Inter
{
public void method1()
{
}
public void method2()
{
}
public void method3()
{
}
}
class Test1 extends Test
{
public void method1()
{
System.out.println("test1,method1 run);
}
}
class Test2 extends Test
{
public void method2()
{
System.out.println("test2,method2 run);
}
}
/*
class Test1 implements Inter
{
public void method1()
{
System.out.println("test1,method1 run);
}
public void method2()
{
}
public void method3()
{
}
}
class Test2 implements Inter
{
public void method1()
{
}
public void method2()
{
System.out.println("test2,method2 run);
}
public void method3()
{
}
}
*/
interface A{void show1();
void show2();
}
interface B{void show ();}
interface C extends A,B{
}
abstract class D implements A{
@Override
public void show2() {
}
@Override
public void show1() {
// TODO Auto-generated method stub
}
}