标签:func 对象 class interface 抽象类 code art 支持 imp
接口的确很不好理解!!!!!那我来好好总结一下:
首先要理解接口是一个独立存在的,和类是不一样的东西,所以,直接用接口的定义是:
访问权限控制符 interface 接口名 [extends 接口列表] {
常量;//接口中的变量都是默认以public static final修饰的
抽象方法;//接口中的方法默认都是以public abstract修饰的,,注意!!!abstract 和private final static 并存
内部类;//接口中可以有内部类
静态方法;//jdk8支持
默认方法;//jdk8支持
}
1 package com.xt.imp.test; 2 3 public interface Animals { 4 5 public static final int I=0; 6 7 public abstract void eat(); 8 9 class heart{ 10 11 } 12 13 public static void sleep() { 14 15 } 16 17 public default void work() { 18 19 } 20 }
访问权限控制符:只能是public 和友好的 接口名和public 修饰的接口名一致
[extends 接口列表]代表:接口可以多继承接口,不能 继承类,对比之前的类只能单继承类
1 package com.xt.imp.test; 2 3 public interface IA extends IMammal,IB {//接口可以多继承接口,不能 继承类,对比之前的类只能单继承类 4 5 } 6 7 interface IB{//接口前面的访问控制符只能是public 友好的,public修饰的只能在单个文件里 8 9 }
接口中没有构造方法,而抽象类有构造方法,抽象类不能被实例化,但是可以继承其构造方法
接口中没有 静态代码块,非静态代码块
类可以 实现多个接口。
实现接口中的抽象方法,必须严格按照重写的规则
1 package com.xt.imp.test; 2 3 public class Whales implements IMammal,Animals {//类可以实现多个接口 4 5 @Override 6 public void move() { 7 System.out.println("移动。。。"); 8 } 9 public static void main(String[] args) { 10 System.out.println(IMammal.i); 11 } 12 13 //实现接口中的抽象方法,必须严格按照重写的规则 14 @Override 15 public void eat() { 16 17 } 18 19 }
如果一个类实现了一个接口,但但没有实现接口中的所有抽象方法,那么这个类必须是abstract类。
如果多个接口中定义了相同的抽象方法,则在实现类中只实现其中一个即可
接口回调描述的是一种现象:接口声明的变量指向其实现类实例化的对象,那么该接口变量就可以调用接口中的抽象方法。
接口没有构造方法,不能创建自己的对象,但是可以引用实现类的对象
1 package com.xt.imp.test; 2 3 public class Studens implements IMammal { 4 5 public static void main(String[] args) { 6 IMammal im = new Studens(); 7 System.out.println(im.i); 8 im.move(); 9 } 10 11 @Override 12 public void move() { 13 System.out.println("移动。。"); 14 } 15 }
函数式接口:
1 package com.xt.imp.test; 2 3 @FunctionalInterface 4 public interface FunctionInterface { 5 6 void ran(); 7 }
标签:func 对象 class interface 抽象类 code art 支持 imp
原文地址:https://www.cnblogs.com/lyxcode/p/9063012.html