关于我们

质量为本、客户为根、勇于拼搏、务实创新

< 返回新闻公共列表

云南大王-javaSE笔记

发布时间:2020-04-13 00:00:00
  接口不能创建对象,但是可以被实现(`implements` ,类似于被继承)。一个实现接口的类(可以看做是接口的子类),需要实现接口中所有的抽象方法,创建该类对象,就可以调用方法了,否则它必须是一个抽象类。   接口:是功能的集合(接口中定义的都是方法) 定义接口使用的也是.java文件;编译生成的也是.class文件 定义接口使用关键字interface 修饰符 interface 接口名 {    抽象方法;    默认方法; (JDK8以后新增)    静态方法; (JDK8以后新增) }   接口的使用:    1.接口不能创建对象使用   2.可以定义一个实现类,实现(继承)接口,重写接口中的抽象方法,创建实现类对象使用   抽象方法:没有方法体,被abstract修饰的方法   默认的修饰符public abstract可以省略    public abstract 返回值类型 方法名(参数);       注意:       接口中的抽象方法修饰符是可以省略不写,不写默认也是public abstract       建议写出,增强阅读性 public interface MyInter { //定义抽象方法 public abstract void show01(); public abstract int show02(); void show03(String s); }     定义接口的实现类     使用格式:使用类实现接口,重写接口中的抽象方法       public class 实现类名 implements 接口{         重写接口中的抽象方法;       }     注意:       实现类似于继承,类实现接口,就可以继承接口中的所有非私有的成员 public class MyInterImpl implements MyInter{ @Override public void show01() { System.out.println("实现类重写接口中的show01抽象方法!"); } @Override public int show02() { System.out.println("实现类重写接口中的show02抽象方法!"); return 0; } @Override public void show03(String s) { System.out.println("实现类重写接口中的show03抽象方法!"+s); } }     public class Demo01MyInter { public static void main(String[] args) { //接口不能创建对象使用 'MyInter' is abstract; cannot be instantiated //MyInter mi = new MyInter(); //创建接口的实现类对象 MyInterImpl my = new MyInterImpl(); my.show01(); my.show02(); my.show03("赵四"); } }     默认方法     定义格式:       修饰符 default 返回值类型 方法名(参数){         方法体;       }         注意:         默认方法的修饰符default不能省略 public interface MyInter { public default void show01(){ System.out.println("MyInter接口中的默认show01方法"); } public default void show02(){ System.out.println("MyInter接口中的默认show02方法"); } }     含有默认方法的接口的使用:定义实现类,实现接口,选择性的重写默认方法,创建实现类对象使用 重写了默认方法:使用实现类重写后的方法 没有重写默认方法:使用继承自接口中的默认方法     注意:       实现类重写接口中的默认方法,去掉default修饰符   public class MyInterImpl implements MyInter{ @Override public void show01() { System.out.println("实现类重写了MyInter接口中的show01默认方法"); } }     public class Demo01MyInter { public static void main(String[] args) { //创建接口的实现类对象 MyInterImpl my = new MyInterImpl(); my.show01();//实现类重写的 my.show02();//继承自接口的 } }     静态方法     定义格式:       修饰符 static 返回值类型 方法名(参数){         方法体       }       注意: 定义静态方法不能省略static关键字 定义含有静态方法的接口使用: 静态成员属于类(接口),所以可以通过接口名.方法名(参数)直接使用   public interface MyInter { public static void show01(){ System.out.println("MyInter接口的静态show01方法"); } public static String show02(int a){ System.out.println("MyInter接口的静态show01方法"+a); return "哈哈"; } }     public class MyInterImpl implements MyInter{ //@Override//Method does not override method from its superclass public static void show01(){ System.out.println("MyInterImpl类的静态show01方法"); } }         静态方法只能使用接口名调用,不可以通过实现类的类名或者实现类的对象调用     静态方法是不能重写的,属于类|接口本身,也不能被实现类继承使用。在实现类中定义了静态方法,属于实现类本身 public class Demo01MyInter { public static void main(String[] args) { //通过接口名.方法名(参数)调用接口中的静态方法 MyInter.show01(); String s = MyInter.show02(10); System.out.println(s); MyInterImpl.show01(); } }     接口的多实现   语法     class 类名 [extends 父类名] implements 接口名1,接口名2,接口名3... {       // 重写接口中抽象方法【必须】       // 重写接口中默认方法【不重名时可选】     }     抽象方法     接口中,有多个抽象方法时,实现类必须重写所有抽象方法。如果多个接口中抽象方法有重名的,只需要重写一次。     默认方法     接口中,有多个默认方法时,实现类都可继承使用。如果默认方法有重名的,必须重写一次。     静态方法     接口中,存在同名的静态方法并不会冲突,原因是只能通过各自接口名访问静态方法。     优先级的问题     当一个类,既继承一个父类,又实现若干个接口时,父类中的成员方法与接口中的默认方法重名,子类就近选择执行父类的成员方法。   接口的多继承 接口的继承使用 `extends` 关键字,子接口继承父接口的方法。如果多个父接口中的默认方法有重名的,那么子接口需要重写一次 子接口重写默认方法时,default关键字可以保留。 子类重写默认方法时,default关键字不可以保留。   其他成员的特点   - 接口中,无法定义成员变量,但是可以定义常量,其值不可以改变,默认使用public static final修饰。   - 接口中,没有构造方法,不能创建对象。   - 接口中,没有静态代码块。   抽象类和接口 一个类只能继承一个直接父类(可能是抽象类),却可以实现多个接口, 接口弥补了Java的单继承 ​抽象类为继承体系中的共性内容, 接口为继承体系中的扩展功能  

/template/Home/Zkeys/PC/Static