JavaSE笔记6.10-面向对象-接口

一. 概述

1. 定义

初期理解:
可以认为是一个特殊的抽象类。当抽象类中的方法都是抽象的,那么该类可以通过接口的形式来表现。
class用于定义类
interface用于定义接口

2. 格式

(1)接口中常见定义:常量&抽象方法
(2)接口中的所有成员都有固定修饰符
常量:public static final
方法:public abstract
接口中的成员都是public的

3. 实例化
  • 接口是不可以创建对象的,因为有抽象方法;
  • 接口不适合被继承(extends),因为接口中所有的方法都是抽象的,不能直接被子类拿来用;
  • 接口需要被实现(implements);
  • 子类对接口中的抽象方法全都覆盖后,子类才可以实例化。否则子类是一个抽象类。
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

4. 特性
  • 接口可以被类多实现
    接口可以被类(接口)多实现。
    也是对多继承不支持的转换形式,Java支持多实现。
  • 为什么接口可以被多实现
    因为需要实现的接口中,方法都是抽象的,没有主体,子类可以任意定义
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(){
     }     //子类任意定义
}

二. 关系

1. 类与接口

类与接口之间是实现的关系,而且类可以继承一个类的同时实现多个接口

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(){
     }     //子类任意定义
}
2. 接口与接口
(1)接口与接口之间可以有继承关系
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(){
     }
}
(2)接口之间可以多继承

不仅可以被多实现,本身还可以多继承,因为没有方法主体

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的抽象方法  
}

三. 特点

  1. 接口是对外暴露的规则。
  2. 接口是程序的功能扩展。
  3. 接口可以用来多实现。
  4. 类与接口之间是实现的关系,而且类可以继承一个类的同时实现多个接口。
  5. 接口与接口之间可以有继承关系。

四. 举例(接口可用于功能扩展)

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(){
     }
}

JavaSE笔记6.10-面向对象-接口_第1张图片

你可能感兴趣的:(JavaSE,javase,面向对象编程,接口)