JAVA基础之interface

当一个抽象类中的方法全是抽象的时候,这时可以将该抽象类用
另一种形式定义和表示,就是接口,关键字 interface 


这时定义接口使用的关键字就不是class,而是interface


接口中常见的成员都有固定的修饰符:
1.全局常量:
public static final
2.抽象方法:
public abstract

由此得出结论,接口中的成员都是公共的权限。

比如:

interface YuEr
{
	public static final int NUM=9;
	public static final double NUMBER=9.5;
	//以上在接口类中,全局常量的代码定义,public static funal不写的话JVM虚拟机也会自动添加这些关键字
	//但是一般我们会将其写上,是为了提高阅读性。
	public abstract void show();
	public abstract void work();
	//同样,public abstract这两个关键字不写虚拟机也会自动添加,我们一般还是得将其写上。
}
类与类或抽象类之间是继承关系,类与接口之间是实现关系。
实现关键字:implements
接口是不可以被实例化的。
只能由实现了接口的子类并覆盖了接口中所有的抽象方法后,该子类才可以实例化。
否则,这个子类就是一个抽象类。

class DemoYuer implements YuEr
{
	public void show()
	{
		System.out.println("月球上的人"+NUM);
	}
	public void work()
	{
		System.out.println("粤语残片");
	}
	
}
多实现:
在Java中不直接支持多继承,因为会出现调用的不确定性(如两个父类中的函数完全相同时)
所以Java将多继承机制改良,在Java中变成多实现。
即一个类可以实现多个接口。


比如:

interface A
{
	public abstract void show();
}
interface B
{
	public abstract void show();
}
class LingHan implements A,B
{
	public void show()
	{
		System.out.println("你好。");
	}
}
因为接口中的方法没有方法体(抽象函数都没有方法体),所以当两个接口里出现了完全相同的函数时,
子类实现时会将两个抽象函数都覆盖来定义方法体。就不会出现调用的不确定性了。

一个类在继承另一个类的同时,还可以实现多个接口。
比如:

interface C
{
	public abstract void haha();
}
interface D
{
	public abstract void hehe();
}
class Fu
{
	void heihei()
	{
		System.out.println("Tony你好。");
	}
}
class Zi extends Fu implements C,D
{
	public void haha()
	{
		System.out.println("Jack你好。");
	}
	public void hehe()
	{
		System.out.println("Rose你好");
	}
}
接口的出现避免了单继承的局限性。


类与类之间是继承关系,类与接口之间是实现关系。
接口与接口之间是继承关系,而且可以多继承。
所以,java中是可以多继承的,只不过是接口之间才能多继承。

比如:

interface E extends  A,B,C,D	//接口E继承了接口A,B,C,D
{
	public abstract void qie();
}
class Duo implements E// 类Duo实现接口E相当于同时实现了接口A,B,C,D
{
	public void show()
	{
		System.out.println("明年今日");
	}
	public void haha()
	{
		System.out.println("富士山下");
	}
	public void hehe()
	{
		System.out.println("海阔天空");
	}
	public void qie()
	{
		System.out.println("情人");
	}

}
抽象类和接口的异同点:
相同点:
都是不断向上抽取而来的。
不同点:
1.抽象类需要被继承,而且只能单继承。
 接口需要被实现,而且可以多实现。
2.抽象类中可以定义抽象方法和非抽象方法,子类继承后,非抽象方法可直接调用。
 接口中只能定义抽象方法,必须由子类去实现。
3.抽象类的继承,是is a关系。是在定义该体系的基本共性内容。
 接口的实现,是Like a关系。是在定义该体系的额外功能。

class InterfaceDemo  
{
	public static void main(String[] args) 
	{
		LingHan l=new LingHan();
		l.show();
		System.out.println("--------------------");
		DemoYuer d=new DemoYuer();
		System.out.println(d.NUM);
		d.show();
		d.work();
		System.out.println("--------------------");
		Zi z= new Zi();
		z.haha();
		z.hehe();
		z.heihei();
		System.out.println("--------------------");
		Fu f=new Fu();
		f.heihei();
		System.out.println("--------------------");
		Duo c=new Duo();
		c.hehe();
		c.haha();
		c.show();
		c.qie();
	}
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值