Java接口

Java接口

创建抽象类是为了希望通过这个接口操作一系列类。

抽象方法:仅有声明而没有方法体

abstract void f();

包含抽象方法的类叫做抽象类。

如果从一个抽象类继承,并想创建该新类的对象,那么就必须为基类中的所有抽象方法提供方法定义。如果不这样做,导出类便也是抽象类。


interface关键字使抽象的概念更向前迈进了一步。

interface这个关键字产生一个完全抽象的类,它根本没有提供任何具体的实现。它允许创建者确定方法名,参数列表,返回类型,但是没有任何方法体。接口只提供了形式,并未提供任何具体实现。

一个接口表示:所有实现了该特定接口的类看起来都应该是这个样子的。

要想一个类遵循某个特定接口,需要使用implements关键字。

import java.util.*;

enum Node{
	MIDDLE_C,C_SHARP,B_FLAT
}

interface Instructment{
	public void play(Node n);
	public void adjust();
}

class Winds implements Instructment{
	public void play(Node n){
		System.out.println(this+".play() "+n);
	}
	public String toString(){
		return "Winds";
	}
	public void adjust(){
		System.out.println(this+".adjust()");
	}
}

 class Percussion implements Instructment{
	 public void play(Node n){
		 System.out.println(this+".play() "+n);
	 }   
	 public String toString(){
		 return "Percussion";
	 }
	 public void adjust(){
		 System.out.println(this+".adjust()");
	 }
 }

 class Stringed implements Instructment{
	 public void play(Node n){
		 System.out.println(this+".play() "+n);
	 }   
	 public String toString(){
		 return "Stringed";
	 }
	 public void adjust()
	 {
		 System.out.println(this+".adjust()");
	 }
 }

 class Brass extends Winds{
	 public String toString(){
		 return "Brass";
	 }
}

 class WoodWinds extends Winds{
	 public String toString(){
		 return "WoodWinds";
	 }
 }

public class Music2{
	public static void tune(Instructment i){
		i.play(Node.MIDDLE_C);
	}
	
	static void tuneAll(Instructment[] e){
		for(Instructment i:e)
			tune(i);
	}

	public static void main(String[] args){
		Instructment[] e={
			new Winds(),
			new Percussion(),
			new Stringed(),
			new Brass(),
			new WoodWinds()
			};
		tuneAll(e);
	}
}

多重继承:如果要从一个非接口的类继承,那么只能从一个类继承,其余的基元素都必须是接口,需要将所有的接口名都置于implements关键字之后,用逗号将它们一一隔开。可以继承任意多个接口,并可以向上转型为每个接口,因为每个接口都是一个独立的类型。

import java.util.*;

interface CanFight{
	void fight();
}

interface CanSwim{
	void swim();
}

interface CanFly{
	void fly();
}

class ActionCharacter{
	public void fight(){
		System.out.println("Fight");
	}
}

class Hero extends ActionCharacter
	implements CanFight,CanSwim,CanFly{
		public void swim(){
			System.out.println("Swim");
		}
		public void fly(){
			System.out.println("Fly");
		}
	}

public class Adventure{
	public static void t(CanFight x){
		x.fight();
	}

	public static void u(CanSwim x){
		x.swim();
	}

	public static void v(CanFly x){
		x.fly();
	}

	public static void w(ActionCharacter x){
		x.fight();
	}

	public static void main(String[] args){
		Hero h=new Hero();
		t(h);
		u(h);
		v(h);
		w(h);
	}
}


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值