面向对象--接口--接口的成员特点

接口的成员特点

程序引例

/*
        接口成员的特点:
            成员变量:
                只能是常量,并且是静态的
                它里面给成员变量的默认修饰符是public static final
                建议:手动全部补齐
            构造方法:
                接口中没有构造方法
            成员方法:
                接口中的成员方法只能是抽象方法,没有方法体,连大括号都没有
                它会自动补充修饰符:public abstract
                建议:手动全部补齐
*/

interface Inter{  //➡ abstract interface Inter{,当定义完成员方法fun()后从反编译工具中看出加上了abstract
  
  //先在接口中定义一个成员变量a
      int a = 10;    //➡public static final int a = 10;
  //在这里我们看到的定义a的格式是成员变量啊,为什么不能改变a的值呢?
  //因为接口中默认只能是静态的常量
  
//它里面给成员变量的默认修饰符是public static final
    public static final int b = 20;
  
//接口中没有构造方法
//    Inter(){}

//   Error:接口抽象方法不能带有主体
//    public void fun(){
//        System.out.println("玩游戏");
//    }

  //接口中的成员方法只能是抽象方法,没有方法体,连大括号都没有
    public void fun();//它会自动补充修饰符➡public abstract void fun();
  //并且在反编译工具中看出不仅fun()方法中加了abstract关键字,连接口定义中都加了,
  //哪个先加的呢?是fun()上先加的,然后因为有抽象方法的类必须是抽象类,所以上面
  //接口的定义格式中会加上abstract。(接口不是类,这边为了方便理解这样写)
}


//接口只能被实现,不能被继承
//class Demo1 extends Inter{}   ×


//虽然接口中没有构造方法,但是多态初始化的时候要先初始化父类再初始化子类
//这里其实继承了一个父类
//java中所有的类都默认继承一个类:Object
//每一个class都有Object作为超类
//那么所有继承Object类的实现对象都实现了这个类中的方法
class Demo1 implements Inter{//➡class Demo1 extends Object implements Inter{
    @Override
    public void fun() {
        System.out.println("玩游戏2");
    }
}

public class InterfaceDemo2 {
    public static void main(String[] args) {
        Inter i = new Demo1();
      //我用Demo1类去实现接口Inter,那么我可以通过i去调用a的值吗?
      //    当然可以,那么我又想了能不能去改变a的值?
              System.out.println(i.a);
     //Error无法为最终变量a分配值,不能改变a的值,会报错。
     //这和final关键字的情况很像。为什么呢?
     //        i.a = 100;
      
//因为接口中默认只能是静态的常量,所以我可以直接通过接口名调用a
//        System.out.println(Inter.a);
    }
}
posted @ 2021-12-12 19:50  赤兔胭脂小吕布  阅读(130)  评论(0编辑  收藏  举报