Java Se----接口
来源:互联网 发布:mac 关闭已打开的程序 编辑:程序博客网 时间:2024/05/17 07:27
接口
一.概念:相当于特殊的抽象类
二.语法
a) 定义接口:interface 接口名称{ }
b) 实现接口:implements 接口名称{ }
三.与抽象类的异同
a) 相同点:
i. 不能new对象
ii. 都可以编译成字节码文件
iii. 都可以作为引用类型
b) 不同点
i. 接口中所有属性都是公开静态常量,隐式使用public static final修饰
public class TestBaseInterface{public static void main(String[] args){// new MyClass();// new MyInterface();//错误:都是抽象的无法实例化// MyClass mc;// MyInterface mi; //正确:都可以作为引用类型// System.out.println(MyClass.a); // 错误: 接口中所有属性都是公开静态常量 无法从静态上下文中引用非静态 变量 a// MyInterface.a = 20;// 错误: 接口中所有属性都是公开静态常量 无法为最终变量a分配值System.out.println(MyInterface.a); //正确}}abstract class MyClass{int a = 10;public void m1(){}public static void m2(){}public abstract void m3();}interface MyInterface{public static final int a = 10;//公开静态常量public abstract void m1();//公开抽象方法}
ii. 接口中所有方法都是公开抽象方法,隐式使用public abstract修饰
iii. 接口中没有构造方法,没有动态、静态代码块
四.关系
a) 类与类:继承关系,单继承
b) 类与接口:多实现关系
c) 接口与接口:多继承关系
d) 注:一个类在继承父类的同时,还可以实现多个接口
五.规范
a) 任何类在实现接口的同时,必须实现接口中的所有抽象方法,否则该类还是抽象类
b) 实现接口中的抽象方法,访问修饰符必须是public
六.应用场景:Java为单继承,当父类提供的方法个数无法满足子类需求时,可以通过实现接口来扩充子类的能力
public class TestPrinter{public static void main(String[] args){Printer printer = new Printer();Transfable tf1 = new BlackInkBox();Transfable tf2 = new Bowl();printer.print(tf1);}}class Printer{public void print(Transfable tf){System.out.println("使用" + tf.getColor() + "的墨水打印");}}interface Transfable{public abstract String getColor();}class BlackInkBox implements Transfable{public String getColor(){return "黑色";}}class Bowl implements Transfable{public String getColor(){return "彩色";}}
七.引用:
a) 接口引用指向实现类对象,仅可调用接口中所声明的方法
interface Runnable{public abstract void run();//接口的方法是 一种约定}interface Swimmable{public abstract void swim();}interface Flyable{void fly();}
public class TestAnimals{public static void main(String[] args){// Animal a = new Cat();// a.eat(); //正确 父类引用指向子类对象,仅可调用父类中所声明的属性和方法// Runnable r = new Dog();// r.eat(); //错误: 找不到符号// r.run();//正确 接口引用指向实现类对象,仅可调用接口中所声明的方法}public static void m(Runnable r){r.run();}}abstract class Animal{public abstract void eat();}class Dog extends Animal implements Runnable,Swimmable{public void eat(){System.out.println("狗在吃骨头");}public void run(){System.out.println("狗在狂奔");}public void swim(){}}class Cat extends Animal implements Runnable{public void eat(){System.out.println("猫在吃鱼");}public void run(){}}class Fish extends Animal implements Swimmable{public void eat(){System.out.println("鱼在吃虾米");}public void swim(){}}class Bird extends Animal implements Runnable,Flyable{public void eat(){System.out.println("鸟在吃虫儿");}public void run(){}public void fly(){}}class Bus implements Runnable{public void run(){}}
b) 使用接口作为方法形参,可以更自然的使用多态
八.接口回调:先有接口使用者,后有接口的实现者
好处: 1.设计与实现完全分离
2.更容易搭建程序框架
3.更容易更换实现
4.程序的耦合降低
import java.util.Arrays; //接口回调public class TestBackInvoke{public static void main(String[] args){Student s1 = new Student("tom",20,'男',100D);Student s2 = new Student("jack",21,'男',99D);Student s3 = new Student("marry",19,'女',98D);Student s4 = new Student("anni",20,'女',100D);Student[] stus = new Student[]{s1,s2,s3,s4};MyArrays.sort(stus);for(int i =0;i < stus.length;i++){System.out.println(stus[i].name + "\t" + stus[i].score);}}}class Student implements Comparable<Student>{String name;int age;char sex;double score;public Student(String name,int age,char sex,double score){this.name = name;this.age = age;this.sex = sex;this.score = score;}public int compareTo(Student s){ //比较规则(分数降序)System.out.println("CompareTo Method Executed");if(this.score > s.score){return -1;//返回-1,则this靠前}else if(this.score < s.score){return 1;//返回整数,则this靠后}else{return 0;}}}class MyArrays{//冒泡排序public static void sort(Student[] stus){for(int i = 0;i < stus.length-1;i++){for(int j = 0;j < stus.length-1-i;j++){int result = stus[j].compareTo(stus[j+1]);if(result == 1){Student temp = stus[j];stus[j] = stus[j+1];stus[j+1] = temp;}}}}}
0 0
- Java SE -- 接口示例
- Java Se----接口
- JAVA SE --接口
- Java SE -- 接口、抽象类
- Java SE之Map接口
- java se TreeSet自己实现Comparator接口
- Java SE——多态续、抽象、接口
- java SE基础(Collection接口概述)
- java SE基础(Map接口及其实现)
- java SE 1.8中Collection接口分析
- Java SE 基础之接口回顾
- 【JAVA SE】20.接口(interface)
- Java SE的多态、接口
- java SE基础(Comparable接口和Comparator接口)
- Java SE 6中 XML 数字签名的标准 Java 接口
- Java SE 6中XML数字签名标准Java接口
- Java SE 6中 XML 数字签名的标准 Java 接口
- Java SE 6中 XML 数字签名的标准 Java 接口
- Android Dev Intro - SurfaceView Overlay
- 识别合法的构造方法
- 在Windows7下使用PHPStorm和GitLab生成SSH key的步骤
- 基于mini2440外部中断的按键驱动
- MongoDB_Java连接MongoDB数据库 Mongo / MongoClient 的使用
- Java Se----接口
- MD5的使用
- matlab数字图像处理(2)
- JVM——高效并发
- ajax的过程
- linux 网络常见的定义问题
- Java从零开始
- array_merge和数组直接相加的区别
- android属性之excludeFromRecents