day8.JAVA面向对象编程技术——接口

本文探讨了JAVA中的抽象类与接口,详细解释了接口在多重继承中的作用。接口作为抽象类的一种,包含常量和抽象方法定义,但无变量和实现。接口的特性包括隐式抽象和所有方法默认公开。接口的实现要求类必须实现所有接口方法,而接口也可继承其他接口,实现多继承。文章通过实例展示了接口的定义、实现和继承过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.抽象类

学习接口之前我们回顾一下抽象类。
在JAVA中用关键字abstract来修饰一个类时,这个类叫做抽象类,用abstract关键字来修饰一个方法时,这个方法叫做抽象方法。

abstract class abstractclass{...}//抽象类
abstract returnType abstractMethod([paramlist])//抽象方法

抽象类必须被继承,抽象方法必须被重写。抽象方法只需声明,无需实现。抽象类不能被实例化,抽象类不一定包含抽象方法。若类中包含了抽象方法,则该类必须被定义为抽象类。

2.接口与多重继承

接口是抽象类的一种,中包含常量和方法的定义,而没有变量和方法的实现,且其方法都是抽象方法。

接口的作用:

主要是帮助实现相当于类的多重继承的功能。

多重继承:

指一个子类可以有一个以上的直接父类,该子类可以继承它所有的直接父类的属性。

3.接口的定义

接口是有常量和抽象方法组成的特殊类,接口的定义包括接口声明和接口体。接口声明格式格式如下:

[可见度] interface 接口名称 [extends 其他的接口名] {
        // 声明变量
        // 抽象方法
}

实例:

/* 文件名 : NameOfInterface.java */
import java.lang.*;
//引入包
 
public interface NameOfInterface
{
   //任何类型 final, static 字段
   //抽象方法
}
接口有以下特性:

接口是隐式抽象的,当声明一个接口的时候,不必使用abstract关键字。
接口中每一个方法也是隐式抽象的,声明时同样不需要abstract关键字。
接口中的方法都是公有的。
例:

interface Animal {
   public void eat();
   public void travel();
}

4.接口的实现

当类实现接口的时候,类要实现接口中所有的方法。否则,类必须声明为抽象的类。
类使用implements关键字实现接口。在类声明中,Implements关键字放在class声明后面。
实现一个接口的语法,可以使用这个公式:

...implements 接口名称[, 其他接口名称, 其他接口名称..., ...] ...

实例:

public class MammalInt implements Animal{
 
   public void eat(){
      System.out.println("Mammal eats");
   }
 
   public void travel(){
      System.out.println("Mammal travels");
   } 
 
   public int noOfLegs(){
      return 0;
   }
 
   public static void main(String args[]){
      MammalInt m = new MammalInt();
      m.eat();
      m.travel();
   }
}

运行结果:

Mammal eats
Mammal travels

接口的完整实例:

//接口的声明
public interface PCI {
	
	void start();
	void stop();

}
//接口的实现,相当于网卡上的PCI插槽
public class NetworkCard implements PCI {

	@Override
	public void start() {
		// TODO Auto-generated method stub
		System.out.println("Send...");

	}
	@Override
	public void stop() {
		// TODO Auto-generated method stub
		System.out.println("Network stop!");

	}

}
//接口的实现,相当于声卡上的PCI插槽
public  class SoundCard implements PCI {

	@Override
	public void start() {
		// TODO Auto-generated method stub
		System.out.println("Du du...");

	}

	@Override
	public void stop() {
		// TODO Auto-generated method stub
		System.out.println("Sound stop!");

	}

}
//接口的实现,相当于主板上的PCI插槽
public class MainBoard {

	public void userPCICard(PCI p) {
		p.start();
		p.stop();
	}
}
//主板调用接口的运行方法,也就是调用PCI插槽
public class Assember {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		MainBoard mb=new MainBoard();
		NetworkCard nc=new NetworkCard();
		mb.userPCICard(nc);
		SoundCard sc=new SoundCard();
		mb.userPCICard(sc);

	}

}

运行结果:

Send...
Network stop!
Du du...
Sound stop!

接口的继承:

一个接口能继承另一个接口,和类之间的继承方式比较相似。接口的继承使用extends关键字,子接口继承父接口的方法。

下面的Sports接口被Hockey和Football接口继承实例:

// 文件名: Sports.java
public interface Sports
{
   public void setHomeTeam(String name);
   public void setVisitingTeam(String name);
}
// 文件名: Football.java
public interface Football extends Sports
{
   public void homeTeamScored(int points);
   public void visitingTeamScored(int points);
   public void endOfQuarter(int quarter);
}
 
// 文件名: Hockey.java
public interface Hockey extends Sports
{
   public void homeGoalScored();
   public void visitingGoalScored();
   public void endOfPeriod(int period);
   public void overtimePeriod(int ot);
}

Hockey接口自己声明了四个方法,从Sports接口继承了两个方法,这样,实现Hockey接口的类需要实现六个方法。
相似的,实现Football接口的类需要实现五个方法,其中两个来自于Sports接口。

接口的多继承

在Java中,类的多继承是不合法,但接口允许多继承。

在接口的多继承中extends关键字只需要使用一次,在其后跟着继承接口。 如下所示:

public interface Hockey extends Sports, Event
以上的程序片段是合法定义的子接口,与类不同的是,接口允许多继承,而 Sports及 Event 可能定义或是继承相同的方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值