Java的接口
Java的接口
-
普通类:只有具体实现
-
抽象类:具体实现和规范(抽象方法)都有!
-
接口:只有规范!自己无法写方法,专业的约束!约束和实现分离:面向接口编程。
-
接口就是规范,定义的是一组规则,体现了现实世界中“如果你是...则必须能...”的思想。如果你是天使,则必须能飞;如果你是汽车就必须能跑;如果你是好人,就必须干掉坏人;
-
接口的本质是契约,就像我们人间的法律一样。制定好,然后大家都遵守。
-
OO的精髓,是对对象的抽象,最能体现这一点的就是接口。为什么我们讨论设计模式都是针对具备了抽象能力的语言(比如c++ 、java、c#等),就是因为设计模式所研究的,实际上就是如何合理的去抽象。
声明类的关键字是class ,声明接口的关键字是interface
package com.cnblogs;
//本类用于实现
public class Application {
public static void main(String[] args) {
UserServiseImpl stu = new UserServiseImpl();
stu.show();
/*
99
99
实现接口的方法
*/
}
}
package com.cnblogs;
/*
本类为接口
*/
public interface UserService {
//接口中不可以写普通方法
//可以定义常量 public static final 接口里没有成员变量,都是常量。所以,你定义一个变量没有写修饰符时,默认会加上:public static final
int AGE = 99;
//接口中的所有定义的方法其实都是抽象的public abstract
void show();
}
package com.cnblogs;
/*
本类用于实现接口
*/
public class UserServiseImpl implements UserService{
@Override
public void show() {
//调用接口的常量
int str = AGE;
System.out.println(str);
System.out.println(UserService.AGE);
System.out.println("实现接口的方法");
}
}
- 作用:
- 约束
- 定义一些方法,让不同的人实现
- public abstract
- 常量 public static final
- 接口不能被实例化,接口中没有构造方法
- implements可以实现多个接口
- 必须要重写接口中的方法
注意:接口里是没有构造方法的,在创建实现类的对象时默认的super(),是调用的默认Object的无参构造。
接口的多继承:
package com.cnblogs;
public interface UserService2 {
}
package com.cnblogs;
/*
本类用于实现接口
*/
//多继承,需要重写两个接口的方法
public class UserServiseImpl implements UserService,UserService2{
@Override
public void show() {
//调用接口的常量
int str = AGE;
System.out.println(str);
System.out.println(UserService.AGE);
System.out.println("实现接口的方法");
}
}
接口可以继承接口
package com.cnblogs;
public interface UserService2 extends UserService{
}
抽象类可以实现接口(意义不大,还需要一个类来继承抽象类来实现)
package com.cnblogs;
/*
本类为接口
*/
public interface UserService {
//接口中的所有定义的方法其实都是抽象的public abstract
void show();
}
package com.cnblogs;
abstract class User implements UserService{
@Override
public void show() {
System.out.println("抽象类实现接口");
}
}
抽象类与接口的区别
抽象类是一个特殊的类,特殊在,抽象类中可以包含没有方法体的方法(抽象方法)。
接口可以理解成一个特殊的抽象类,特殊在,接口里的都是抽象方法,没有普通方法。
接口会为方法自动拼接public abstract,还会为变量自动拼接public final static。
抽象类可以有构造方法–用来给子类创建对象,接口中没有构造方法。
抽象类和接口都不能实例化(创建对象)。
接口可继承接口,并可多继承接口,但类只能单继承。
抽象方法只能声明,不能实现,接口是设计的结果 ,抽象类是重构的结果。