一、接口
1、接口(interface): 接口的地位等同于Class,接口中的所有方法都是抽象方法。在声明接口中的方法时,可以使用abstract关键字,也可以不使用。通常情况下,都会省略掉abstract关键字。因为已经规定了接口中所有的方法都是抽象方法,所以写与不写无太大关系。可以看出接口也是起到一种规范约束的作用和抽象类是一样的。
public interface InterfaceTest {
public abstract void output();
}
通常情况下,都是这样写,abstract关键字省略。
public interface InterfaceTest{
public void output();
}
2、可以把接口看成是特殊的抽象类(抽象类可以有具体方法,也可以有抽象方法,而接口中只能有抽象方法,不能有具体方法)。注意接口跟抽象类一样,不能new一个接口。
3、类可以实现接口。实现使用关键字implements表示,代表了某个类实现了某个接口。
4、一个类实现了某个接口,那么该类就必须要实现接口中声明的所有方法。如果该类是一个抽象类,那么久无需实现接口中的方法了。
实现接口中声明的所有方法
public class Test{
public static void main(String[]args){
MyClass myclass=new MyClass();
myclass.run();
}
}
interface MyInterface{
public void run();
}
class MyClass implements MyInterface{
public void run() {
System.out.println("run");
}
}
输出结果:run
抽象类
public class Test{
public static void main(String[]args){
}
}
interface MyInterface{
public void run();
}
abstract class MyClass implements MyInterface{
public void run(){
System.out.println("run");
}
}
如果要实现接口中的run()方法,必须再定义一个子类来实现这个接口,同时实现这个接口中的方法。
5、Java是单继承的,也就是说某个类只能有唯一的一个父类;一个类可以实现多个接口,多个接口之间用逗号隔开。注意如果这个类不是抽象的,那么就要实现多个接口当中的所有方法。
public class Test{
public static void main(String[]args){
MyClass myclass=new MyClass();
myclass.run();
myclass.output();
}
}
interface MyInterface{
public void run();
}
interface MyInterface2{
public void output();
}
class MyClass implements MyInterface,MyInterface2{
public void run(){
System.out.println("run");
}
public void output() {
System.out.println("output");
}
}
输出结果:
run
output
public class Test{
public static void main(String[]args){
MyClass myclass=new MyClass();
myclass.run();
myclass.output();
myclass.output3();
}
}
interface MyInterface{
public void run();
}
interface MyInterface2{
public void output();
}
class MyParent{
public void output3(){
System.out.println("output3");
}
}
class MyClass extends MyParent implements MyInterface,MyInterface2{
public void run(){
System.out.println("run");
}
public void output() {
System.out.println("output");
}
}
输出结果:
run
output
output3
6、多态: 所谓多态,就是父类型的引用可以指向子类型的引用,或者接口类型的引用可以实现接口的类的实例。关于接口与实现的类之间强制类型转换方式与父类和子类之间的强制类型转换方式完全一样。
public class Test{
public static void main(String[]args){
MyInterface myclass=new MyClass();
myclass.run();
}
}
interface MyInterface{
public void run();
}
class MyClass implements MyInterface{
public void run(){
System.out.println("run");
}
}
输出结果:run
【说明】:接口类型的引用可以指向实现接口的类的实例。
public static void main(String[]args){
//向上转换类型
/*
MyClass myclass=new MyClass();
MyInterface m=myclass;
m.run();}
*/
//向下转换类型
public static void main(String[]args){
MyInterface myclass=new MyClass();
MyClass m=(MyClass)myclass;
m.run();
}