Java入门-08、接口、多态

接口、多态

接口是Java语言中的一种引用类型,是方法的集合
        接口内部主要封装了方法,包含抽象方法,默认方法,静态方法
        定义格式:
public interface 接口名{
//抽象方法
//默认方法
//静态方法
}

接口的使用,它不能创建对象,但是可以被实现(implements,类似于被经常)

public interface JieKou1 {

    public abstract void Print();//抽象方法  在继承类中实现其方法

    //静态方法
    public static void run(){
        System.out.println("接口中的静态方法");
    }

    public static void run1(){
        System.out.println("run1方法");
    }

    //默认方法在实现类中可以修改方法(重写)
    public default void Print1(){
        System.out.println("接口内的默认方法");
    }
}
public class Realize implements  JieKou1{
    //抽象方法的实现
    public void Print(){
        System.out.println("实现接口抽象类方法");
    }

    //默认方法的直接调用(直接调用则不需要些该方法体)或者重写
    //下面例子是重写Print1()
    public  void Print1(){
        System.out.println("重写接口内的默认方法");
    }

    //接口的静态方法无法修改
    public static void run(){
        System.out.println("静态run方法");
    }
}
public class Hello {
    public static void main(String[] args) {
        Realize jieKou2 = new Realize();
        jieKou2.Print();
        jieKou2.Print1();

        /*实现类中并没有重写其run1的静态方法
                在Realize中无法调用run1方法(报错)
                用接口名调用run1方法才可以
        Realize.run1();
        */

        JieKou1.run1();
    }

}

接口的多实现,以及接口与父类知识
1、多个接口中有重名抽象函数,在其实现类中只需要重写一次
2、默认方法有重名的,必须重写一次,不然程序报错
3、接口中出现重名的静态方法并不冲突,因为可以用接口名调用其静态方法
4、优先级问题,一个类既有父类也继承了多个接口,则就近原则选着父类的同名方法

interface A{
    public abstract void run();
    public abstract void run1();

    public default void Method1(){}
    public default void Method2(){
        System.out.println("A接口的Method2方法");
    }
}


interface B{
    public abstract void run();
    public abstract void run2();

    public default void Method1(){}
    public default void Method3(){}
}

class D{
    public void Method2(){
        System.out.println("父类中的Method2方法");
    }

    public void M(){
        System.out.println("aaa");
    }

}
class C extends D implements A,B {
    //多个接口中有重名抽象函数,在其实现类中只需要重写一次
    public void run(){
        System.out.println("多个父接口中有重名抽象函数只需要重写一次");
    }
      @Override
      public void run2() {
          System.out.println("run2");
      }
      @Override
      public void run1() {
          System.out.println("run1");
      }

    //默认方法有重名的,必须重写一次,不然程序报错
    public void Method1(){
        System.out.println("必须重写一次多接口重名的默认方法,不然报错");
    }
  }


public class JKandFLei {
    public static void main(String[] args) {

        C c = new C();
        //就近原则 选着父类同名方法执行
        c.Method2();

        //向上转型
        D d=new C();
        d.M();

        //向下转型
        C c1=(C)d;
        c1.M();
    }
}
发布了14 篇原创文章 · 获赞 8 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/NeverFG/article/details/97612731