初期理解:
可以认为是一个特殊的抽象类。当抽象类中的方法都是抽象的,那么该类可以通过接口的形式来表现。
class用于定义类
interface用于定义接口
(1)接口中常见定义:常量&抽象方法
(2)接口中的所有成员都有固定修饰符
常量:public static final
方法:public abstract
接口中的成员都是public的
interface Inter
{
public static final int NUM=3;
public abstract void show();
}
class Test implements Inter //实现
{
public void show(){
} //将抽象方法覆盖
}
class InterfaceDemo
{
public static void main(String[] args)
{
Test T=new Test();
System.out.println(T.NUM); //通过对象调用静态变量
System.out.println(Test.NUM); //通过子类直接调用静态变量
System.out.println(Inter.NUM); //通过接口直接调用静态变量
}
}
输出结果是:
3
3
3
interface Inter
{
public static final int NUM=3;
public abstract void show(); //没有方法主体,可以由子类任意定义
}
interface InterA
{
public abstract void show(); //没有方法主体,可以由子类任意定义
}
class Test implements Inter,InterA //可以实现多个接口
{
public void show(){
} //子类任意定义
}
类与接口之间是实现的关系,而且类可以继承一个类的同时实现多个接口
interface Inter
{
public static final int NUM=3;
public abstract void show(); //没有方法主体,可以由子类任意定义
}
interface InterA
{
public abstract void show(); //没有方法主体,可以由子类任意定义
}
class Demo
{
public void function(){
}
}
class Test extends Demo implements Inter,InterA //可以继承类并实现多个接口
{
public void show(){
} //子类任意定义
}
interface A
{
public abstract void methodA();
}
interface B extends A
{
public abstract void methodB();
}
interface C extends B
{
public abstract void methodC();
}
class D implements C
{
public void methodsA(){
}
public void methodsB(){
}
public void methodsC(){
}
}
不仅可以被多实现,本身还可以多继承,因为没有方法主体
interface A
{
public abstract void methodA();
}
interface B
{
public abstract void methodB();
}
interface C extends B,A //接口可以多继承,因为没有方法体
{
public abstract void methodC();
}
class D implements C
{
public void methodsA(){
}
public void methodsB(){
}
public void methodsC(){
}
}
接口可以多继承,但是
当相同抽象方法名的返回值类型不同时,会报错
因为对象在调用时,不知道是调用返回值为哪个的方法
//以下是个错误的例子
interface A
{
public abstract int show(); //返回值类型是int
}
interface B
{
public abstract boolean show(); //返回值类型是boolean
}
interface C extends B,A //接口可以多继承,因为没有方法体
{
public abstract void methodC();
}
class D implements C
{
public void methodsC(){
}
public int show(){
} //覆盖了返回值类型为int的抽象方法
public boolean show(){
} //覆盖了返回值类型为boolean的抽象方法
}
abstract class Student
{
abstract void study();
void sleep()
{
System.out.println("sleep");
}
void smoke()
{
System.out.println("抽烟");
}
}
class ZhangSan extends Student
{
void study(){
}
void smoke(){
}
}
void smoke()
这个不是每个子类都需要有的功能,可以单独成接口,被某些需要用到的子类扩展
abstract class Student
{
abstract void study();
void sleep()
{
System.out.println("sleep");
}
}
interface Smoking
{
public abstract void smoke();
}
//子类zhangsan继承了父类Student,并实现了接口Smoking
class ZhangSan extends Student implements Smoking
{
void study(){
}
public void smoke(){
}
}
//子类lisi只继承了父类Student
class Lisi extends Student
{
void study(){
}
}