接口

---------------------- <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支持多实现。


类与类的关系:类与类之间继承extends关系,单继承关系

类与接口的关系:类与接口之间实现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>、期待与您交流! ----------------------



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值