基础篇——接口

写代码的四点:
     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.向一个类添加数据类型: 这种情况是标记接口最初的目的,实现标记接口的类不需要定义任何接口方法(因为标记接口根本就没有方法),但是该类通过多态性变成一个接口类型。

猜你喜欢

转载自blog.csdn.net/qq941263013/article/details/80564766