接口的定义与实现

接口

1.接口的本质

普通类:只有具体实现

抽象类:具体实现和规范(抽象方法) 都有!

接口:只有规范!

2. 接口与抽象类的区别

抽象类也是类,除了可以写抽象方法以及不能直接new对象之外,其他的和普通类没有什么不一样的。接口已经另一种类型了,和类是有本质的区别的,所以不能用类的标准去衡量接口。

声明类的关键字是class,声明接口的关键字是interface

抽象类是用来被继承的,java中的类是单继承。

类A继承了抽象类B,那么类A的对象就属于B类型了,可以使用多态

一个父类的引用,可以指向这个父类的任意子类对象

注:继承的关键字是extends

接口是用来被类实现的,java中的接口可以被多实现。

类A实现接口B、C、D、E…,那么类A的对象就属于B、C、D、E等类型了,可以使用多态

一个接口的引用,可以指向这个接口的任意实现类对象

注:实现的关键字是implements

3.接口中的方法都是抽象方法

接口中可以不写任何方法,但如果写方法了,该方法必须是抽象方法

public interface Action{ 
    public abstract void run(); 
    
    //默认就是public abstract修饰的 
    void test(); 
    public void go(); 
}
4.接口中的变量都是静态常量(public static final修饰)

接口中可以不写任何属性,但如果写属性了,该属性必须是public static fifinal修饰的静态常量。

注:可以直接使用接口名访问其属性。因为是public static修饰的

注:声明的同时就必须赋值.(因为接口中不能编写静态代码块)

public interface Action{ 
    public static final String NAME = "tom"; 
    //默认就是public static final修饰的 
    int AGE = 20; 
}

main: 
System.out.println(Action.NAME); 
System.out.println(Action.AGE);
5.一个类可以实现多个接口
public class Student implements A,B,C,D{ 
    //Student需要实现接口A B C D中所有的抽象方法 
    //否则Student类就要声明为抽象类,因为有抽象方法没实现 
}
main: 
A s1 = new Student(); 
B s2 = new Student(); 
C s3 = new Student(); 
D s4 = new Student();

注:

s1只能调用接口A中声明的方法以及Object中的方法

s2只能调用接口B中声明的方法以及Object中的方法

s3只能调用接口C中声明的方法以及Object中的方法

s4只能调用接口D中声明的方法以及Object中的方法

注:必要时可以类型强制转换

例如 : 接口A 中有test() , 接口B 中有run()

A s1 = new Student(); 
s1.test(); 

B s2 = new Student(); 
s2.run(); 

if(s1 instanceof B){ 
    ((B)s1).run(); 
}
6.一个接口可以继承多个父接口
public interface A{ 
    public void testA(); 
}

public interface B{ 
    public void testB(); 
}
//接口C把接口A B中的方法都继承过来了
public interface C extends A,B{ 
    public void testC(); 
}

//Student相当于实现了A B C三个接口,需要实现所有的抽象方法 
//Student的对象也就同时属于A类型 B类型 C类型 
public class Student implements C{ 
    public viod testA(){} 
    public viod testB(){} 
    public viod testC(){} 
}

main: 
C o = new Student(); 
System.out.println(o instanceof A);//true 
System.out.println(o instanceof B);//true 
System.out.println(o instanceof C);//true 
System.out.println(o instanceof Student);//true 
System.out.println(o instanceof Object);//true 
System.out.println(o instanceof Teacher);//false 

//编译报错 
System.out.println(o instanceof String);

注:System.out.println(o instanceof X);

如果o是一个接口类型声明的变量,那么只要X不是一个final修饰的类,该代码就能通过编译,至于其结果 是不是true,就要看变量o指向的对象的实际类型,是不是X的子类或者实现类了。

注:一个引用所指向的对象,是有可能实现任何一个接口的。(java中的多实现)

7.接口的作用
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值