JAVA中的接口

本人Java小白,目前在自学Java的基础篇章,现在刚刚看完接口,大概谈一下。
1、接口简介
  接口的定义与类的定义类似,使用interface关键字定义接口,例如:
  interface China{
    public void people();
  }
接口中定义的方法全是抽象方法,当然也可以包含常量的声明。
  Java中的接口都要由类去实现,以便使用接口中的方法。一个类可以实现多个接口,使用implements关键字声明自己实现一个接口或者多个接口,实现某个接口的非抽象类要重写该接口的所有方法。下面是一个简单的例子:
  public class AnHui implements China{
    public void people() {
      System.out.println("我是安徽人!");
    }
  }
  当一个类实现多个接口时,只需用逗号隔开即可,比如AnHui类实现了China和Asia接口:
  class AnHui implements China,Asia

2、接口回调
  用接口声明的变量称为接口变量,接口属于引用型变量,接口变量可以存放实现该接口的类的对象的引用,例如:
  interface China{
    public void people();
    public void house();
  }
  
  public class AnHui implements China{
    public void people() {
      System.out.println("我是安徽人!");
    }
    public void house() {
      System.out.println("房价似火箭在飞奔!");
    }
    public void language() {
      System.out.println("安徽方言!");
    }
  }
  
  public class Example{
    public static void main(String args[]) {
       China china;
       china = new AnHui();
       china.people(); //接口变量回调类实现的接口的方法
       china.house(); //china接口变量不能调用language方法,因为接口中没有此方法。
    }
  }

3、接口与abstract类的比较
        抽象类
        特点:
        1. 抽象类中可以有构造方法,但不能实例化
        2.抽象类中可以存在普通属性,方法,静态属性和方法。
        3.抽象类中可以存在抽象方法。
        4.如果一个类中有一个抽象方法,那么当前类一定是抽象类; 抽象类中不一定有抽象方法

       5.抽象类中的抽象方法,需要有子类实现,如果子类不实现,则子类也需要定义为抽象的。

        接口

        1.在接口中只有抽象方法(Java 8之前)。
        2.在接口中只有常量,因为定义的变量,在编译的时候都会默认加上public static final 
        3.在接口中的方法,永远都被public来修饰(Java 8之前)。
        4. 接口中没有构造方法,也不能实例化接口的对象。
        5. 接口可以实现多继承
        6.接口中定义的方法都需要有实现类来实现,如果实现类不能实现接口中的所有方法,则实现类定义为抽象类。


补充:

接口:
JDK 1.8以前,接口中的方法必须是public的

JDK 1.8时,接口中的方法可以是public的,也可以是default的,还可以是static的

//JDK 8: 
public interface Exa {
	default void fun1() {
		System.out.println(1);
	}//default方法也必须是非抽象方法
	
	public abstract void fun2();
	
	public static void fun3(){
		System.out.println(2);
	}//static方法必须是非抽象方法
	
	void fun4();//默认仍然是public abstract

}

接口中变量默认为public static final,也就是只能是常量。

抽象类:

JDK 1.8以前,抽象类的方法默认访问权限为protected
JDK 1.8时,抽象类的方法默认访问权限变为default

抽象方法也可以用protected修饰

public abstract class Ab {
	protected abstract void fun1();
	public abstract void fun2();
	abstract void fun3();//默认是default的

}


  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值