---------------------- <a href="http://www.itheima.com"target="blank">ASP.Net+Unity开发</a>、<a href="http://www.itheima.com"target="blank">.Net培训</a>、期待与您交流! ----------------------
接口
接口:
可以认为是一个特殊的抽象类,接口没有构造函数。
当抽象类中的方法都是抽象的,那么该类可以通过接口的形式来表示。class用于定义类
interface 用于定义接口。接口和抽象类区别:
相同点:都是不断向上抽取出来的抽象的概念。
区别:
1,抽象类体现继承关系,一个类只能单继承;
接口体现实现体系,一个类可以多实现。2,抽象类是继承,是"is a"关系,就好比是亲爹。
接口是实现,是"like a"关系。就好比是干爹。3,抽象类中可以定义非抽象方法,供子类直接使用。
接口的方法都是抽象方法,接口的中成员都有固定修饰符接口中没有构造函数。接口中的成员变量都是静态常量,初始化 时就必须赋值。
接口定义时,格式特点:
1,接口中常见定义:常量,抽象方法。
2,接口中的成员都有固定修饰符。常量:public static final。定义时,必须初始化。一旦赋值就不能修改!
方法:public abstract 访问级别必须是public,否则会编译错误!注:接口中的成员都是public的。
接口:是不可以创建对象的,因为有抽象方法。
需要被子类实现,子类对接口中的抽象方法全都覆盖后,子类才可以实例化。否则子类是一个抽象类。
接口可以被类多实现,也是对多继承不支持的转换形式。java支持多实现。
类与接口的关系:类与接口之间实现implements关系,多实现关系
接口与接口的关系:接口与接口继承extends关系,接口之间可以支持多继承extends。接口的特点:
接口是对外暴露的规则。
接口是程序的功能扩展。接口的出现降低耦合性。
接口可以用来多实现。类与接口之间是实现关系,而且类可以继承一个类的同时实现多个接口。
接口与接口之间可以有继承关系。
示例代码:
package com.itheima;
/**
* 接口的示例
* @author wuyong
*
*/
public class InterfaceDemo {
/**
* @param args
*/
public static void main(String[] args)
{
Sun t = new Sun();
System.out.println(t.NUM);
System.out.println(Sun.NUM);
t.show();
t.function();
}
}
/**
* 接口Interface1
* @author wuyong
*
*/
interface Interface1
{
public static final int NUM = 3;
public abstract void show();
}
/**
* 接口Interface2
* @author wuyong
*
*/
interface Interface2
{
public abstract void show();
}
/**
* 父类Father
* @author wuyong
*
*/
class Father
{
public void function(){
System.out.println("Father");
}
}
/**
* 子类Sun,继承Father类,
* 实现Interface1,Interface2
* @author wuyong
*
*/
class Sun extends Father implements Interface1,Interface2
{
public void show(){
System.out.println("Sun implements Interface1,Interface2");
System.out.println("Interface1's NUM is " + NUM);
}
public void function(){
System.out.println("Sun's SuperClass is Father");
}
}
/**
* 接口A
* @author wuyong
*
*/
interface A
{
void methodA();
// int show();//返回值是int,如果子接口中存在同名方法,但返回值类型不同,则编译错误!
}
/**
* 接口B
* @author wuyong
*
*/
interface B //extends A
{
void methodB();
void show();//返回值是void
}
/**
* 接口C
* @author wuyong
*
*/
interface C extends B,A //类型A和B不兼容; 两者都定义了show(), 但却带有不相关的返回类型
{
void methodC(); //这里就要继承两个,但方法不能重复定义,此时出问题,故不多继承
}
/**
* 实现类D,实现接口C。此时相当于实现了A,B,C三个接口的功能
* @author wuyong
*
*/
class D implements C
{
public void methodA(){
System.out.println("methodA of interfaceA");
}
public void methodC(){
System.out.println("methodCof interfaceC");
}
public void methodB(){
System.out.println("methodB of interfaceB");
}
@Override
public void show() {
// TODO Auto-generated method stub
System.out.println("Implements Class D");
}
}
---------------------- <a href="http://www.itheima.com"target="blank">ASP.Net+Unity开发</a>、<a href="http://www.itheima.com"target="blank">.Net培训</a>、期待与您交流! ----------------------