基础篇——接口

写代码的四点:
     1.明确需求。要做什么?
     2.分析思路。要怎么做?(1,2,3……)
     3.确定步骤。每一个思路要用到哪些语句、方法和对象。
     4.代码实现。用具体的语言代码将思路实现出来。
 
学习新技术的四点:
     1.该技术是什么?
     2.该技术有什么特点?(使用需注意的方面)
     3.该技术怎么使用?(写Demo)
     4.该技术什么时候用?(在Project中的使用场景 )
 
----------------------早计划,早准备,早完成。-------------------------
 

接口概述:

        接口(interface),在Java编程语言中是一个抽象类型,是抽象方法的集合,通常以interface来声明。一个类通过继承接口的方式,从而来继承接口的抽象方法。解决了单继承的局限性问题。
 

接口的特性:

        1.接口中的方法是隐式抽象的,方法会被隐式的指定为public abstract(也只能是
           public abstract,其他修饰符都会报错);
        2.接口中的变量会被隐式的指定为public static final变量(也只能是public,
           用private修饰会报错);
        3.接口中的方法是不能在接口中实现的,只能由实现接口的类来实现接口中的方法;
        4.一个接口能继承另一个接口;

 

用interface关键字声明一个接口:
//文件名称:Fruits.java
public interface Fruits {
            //声明变量
            public static final int num = 10 ;
 
            //抽象方法
             public abstract void eat () ;
            public abstract void gift();
}
public interface Animals {
 
             public abstract void eat () ;
            public abstract void watch();
}
 

接口的继承:

        1.一个接口能继承另一个接口,接口的继承使用extends关键字,和类的继承一样。
        2.子接口继承父接口的方法;
        3.接口允许多继承,类不允许;
 
//运动
public interface Sports {
 
        //放松
        public abstract void  relax() ;
}
 
//马拉松
public interface Marathon {
 
        //长跑
        public abstract void  longRun() ;
}
 
//跑步
public interface Run  extends Sports ,Marathon{
 
        //跑步
        public abstract void  run() ;
}
  
          Run接口自己声明了一个方法,从Marathon接口继承了一个方法,从Sports接口继承  
         了一个方法。因此实现Run接口,需要实现三个方法。
public class SportsActivity  implements Run {
 
        @Override
        public void  run() {
 
        }
 
        @Override
        public void  longRun() {
 
        }
 
        @Override
        public void  relax() {
 
        }
}

 

接口与类:

        接口并不是类,编写接口的方式和类很相似,但是它们属于不同的概念,类描述对象的属性和方法。接口则包含类要实现的方法。除非实现接口的类是抽象类,否则该类要定义接口中的所有方法。接口无法被实例化,但是可以被实现。一个实现接口的类,必须实现接口内所定义的所有方法,否则就必须将类声明为抽象类。
        接口类型可用来声明一个变量,它们可以成为一个空指针,或是被绑定在一个以此接口实现的对象。
 
类实现接口:支持实现多个接口
public class Button4Activity extends Activity implements Fruits ,Animals{
 
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState) ;
        setContentView(R.layout. activity_btn4) ;
 
        Button4Activity button4Activity = new Button4Activity() ;
        button4Activity.eat() ;
        button4Activity.gift() ;
        button4Activity.watch() ;
}
 
@Override
public void eat() {
        LogUtil. e( "TAG" , "吃水果") ;
        LogUtil. e( "TAG" , "吃动物") ;
}
 
@Override
public void gift() {
        LogUtil. e( "TAG" , "水果当作礼物") ;
}
 
@Override
public void watch() {
        LogUtil. e( "TAG" , "观赏动物") ;
}
}

接口与类的相同点:

        1.一个接口与类可以有多个方法;
        2.接口与类的文件保存在以 .java结尾的文件中,文件名使用接口名、类名;
        3.接口与类的字节码文件保存在以 .class结尾的文件中;
        4.接口与类的字节码文件必须在与包名称相匹配的目录结构中;

接口与类的区别点:

        1.接口不可以实例化对象(因为接口里边存在抽象方法);类可以;
        2.接口没有构造方法;类至少包含一个构造方法;
        3.接口中所有的方法必须是抽象方法;类可以有抽象方法和非抽象方法;
        4.接口不能包含成员变量,除了static、final变量;类可以包含所有类型的成员变量;
        5.接口是被实现;类是被继承;
        6.接口支持多继承;类只能是单继承;
          注意:接口的对象可以利用子类对象的向上转型进行实例化。
                  例:定义接口A、B,类X实现A、B两个接口,就可以通过实例化X类对象后,
                         向上转型进行实例化。
X x = new X() ; //实例化子类对象
A a = x ; //向上转型
B b = x ; //向上转型
 

接口与抽象类:

        1.类在实现接口的方法时,不能抛出强制性异常,只能在接口中,或者继承接口的
          抽象类中抛出强制性异常;
        2.类在重写方法时要保持一致的方法名,并且应该保持相同或者相兼容的返回值类型;
        3.如果实现接口的类是抽象类,那么就没必要实现该接口的方法;
 
用interface关键字声明一个接口:(抛出异常)
//文件名称:Fruits.java
public interface Fruits {
               //声明变量
               public static final int num = 10 ;
 
               //抽象方法
               public abstract void eat () throws Exception ;
               public abstract void gift () ;
}
 
public interface Animals {
 
               public abstract void eat () throws Exception ;
               public abstract void watch () ;
}
 
public class Button4Activity extends Activity implements Fruits , Animals {
 
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState) ;
        setContentView(R.layout. activity_btn4) ;
 
        Button4Activity button4Activity = new Button4Activity() ;
        try {
                button4Activity.eat() ;
        } catch (Exception e) {
                e.printStackTrace() ;
        }
        button4Activity.gift() ;
        button4Activity.watch() ;
}
 
@Override
public void eat() throws Exception{
        LogUtil. e( "TAG" , "吃水果") ;
        LogUtil. e( "TAG" , "吃动物") ;
}
 
@Override
public void gift() {
        LogUtil. e( "TAG" , "水果当作礼物") ;
}
 
@Override
public void watch() {
        LogUtil. e( "TAG" , "观赏动物") ;
}
}
 
抽象类与非抽象类实现接口:支持实现多个接口(因为类是抽象类,所以没必要实现接口的所有方法)
public abstract class AbstractActivity extends Activity implements Fruits ,Animals{
 
@Override
public void eat() throws Exception{
        LogUtil. e( "TAG" , "吃水果") ;
        LogUtil. e( "TAG" , "吃动物") ;
    }
}

 

接口与抽象类的区别:

        1.接口中的方法不能有方法体,但是抽象类中的方法可以有方法体;
        2.接口中的成员变量只能是public static final类型的,而抽象类中的成员变量可以是
           各种类型的;
        3.接口中不能包含静态代码块和静态方法,而抽象类可以包含静态代码块和静态方法;
        4.一个类可以实现多个接口,而一个类只能继承一个抽象类;
 
 

标记接口: 

        标记接口是没有任何方法和属性的接口,它仅仅表明它的类属于一个特定的类型,供其它代码来测试允许做一些事情。最常用的继承接口是没有包含任何方法的接口。
package java.util ;
public interface EventListener {
}
 
标记接口的作用:
        1.建立一个公共的父接口:  正如EventListener接口,这是由几十个其他接口扩展的Java API,你可以使用一个标记接口来建立一组接口的父接口。例如:当一个接口继承了EventListener接口,Java虚拟机(JVM)就知道该接口将要被用于一个事件的代理方案。
        2.向一个类添加数据类型: 这种情况是标记接口最初的目的,实现标记接口的类不需要定义任何接口方法(因为标记接口根本就没有方法),但是该类通过多态性变成一个接口类型。

---------------------------------------------------------------------------------------------------------------------------

早计划,早准备,早完成。 欢迎关注!交流!Star!

GitHub:https://github.com/wangyang0313

微信公众号:一个灵活的胖子MrWang

简书:https://www.jianshu.com/u/e5e733d79b96  

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值