接口,第七题,面向对象

接口的定义

接口(interface)是Java所提供的另一种重要技术,它的结构和抽象类非常相似,也具有数据成员与抽象方法,但它与抽象类又有以下两点不同:

  • 接口里的数据成员必须初始化,且数据成员均为常量;

  • 接口里的方法必须全部声明为abstract,也就是说,接口不能像抽象类一样保有一般的方法,而必须全部是“抽象方法”。

接口定义的语法如下:

 
  1. interface 接口名称 // 定义抽象类
  2. {
  3. final 数据类型 成员名称 = 常量; //数据成员必须赋初值
  4. abstract 返回值的数据类型 方法名称(参数...);
  5. //抽象方法,注意在抽象方法里,没有定义方法主体
  6. }

接口与一般类一样,本身也具有数据成员与方法,但数据成员一定要赋初值,且此值将不能再更改,方法也必须是“抽象方法”。也正因为方法必须是抽象方法,而没有一般的方法,所以抽象方法声明的关键字abstract是可以省略的。

相同的情况也发生在数据成员身上,因数据成员必须赋初值,且此值不能再被更改,所以声明数据成员的关键字final也可省略。事实上只要记得:

  • 接口里的“抽象方法”只要做声明即可,而不用定义其处理的方式;

  • 数据成员必须赋初值。

接口的实现

Java中接口是用于实现多继承的一种机制,也是Java设计中最重要的一个环节,每一个由接口实现的类必须在类内部复写接口中的抽象方法,且可自由地使用接口中的常量。 既然接口里只有抽象方法,它只要声明而不用定义处理方式,于是自然可以联想到接口也没有办法像一般类一样,再用它来创建对象。利用接口打造新的类的过程,称之为接口的实现(implementation)。

接口实现的语法:

 
  1. class 类名称 implements 接口A,接口B //接口的实现
  2. {
  3. ...
  4. }

接口的扩展

接口是Java实现多继承的一种机制,一个类只能继承一个父类,但如果需要一个类继承多个抽象方法的话,就明显无法实现,所以就出现了接口的概念。一个类只可以继承一个父类,但却可以实现多个接口。

接口与一般类一样,均可通过扩展的技术来派生出新的接口。原来的接口称为基本接口或父接口,派生出的接口称为派生接口或子接口。通过这种机制,派生接口不仅可以保留父接口的成员,同时也可加入新的成员以满足实际的需要。

同样的,接口的扩展(或继承)也是通过关键字extends来实现的。有趣的是,一个接口可以继承多个接口,这点与类的继承有所不同。

接口扩展的语法:

 
  1. interface 子接口名称 extends 父接口1,父接口2...
  2. {
  3. ...
  4. }

编程要求

根据提示,在右侧编辑器补充代码:

  • 声明一Person接口,并在里面声明三个常量:nameageoccupation,并分别赋值;

  • 声明一Student类,此类实现Person接口,并复写Person中的talk()方法;

  • 实例化一Student的对象s,并调用talk()方法,打印信息;

  • 具体输出要求请看测试说明。

测试说明

测试输入: 预期输出: 学生——>姓名:张三,年龄:18,职业:学生!

package case7;

public class interfaceTest {
	public static void main(String[] args) {
		// 实例化一Student的对象s,并调用talk()方法,打印信息
		/********* begin *********/
		Student s=new Student();
		s.talk();
		/********* end *********/
	}
}

// 声明一个Person接口,并在里面声明三个常量:name、age和occupation,并分别赋值,声明一抽象方法talk()
interface Person {
	/********* begin *********/
	final String name="张三";
	final int age=18;
	final String occ="学生";
    public abstract void  talk();
	/********* end *********/
}

// Student类继承自Person类 复写talk()方法返回姓名、年龄和职业信息
class Student implements Person {
	/********* begin *********/
public void  talk() {
       System.out.println("学生——>姓名:" + this.name + ",年龄:" + this.age + ",职业:" + this.occ + "!");              
	}
	/********* end *********/
}
/*
class Student implements Person {
	public String talk() {
        return "学生——>姓名:" + this.name + ",年龄:" + this.age + ",职业:"
                + this.occupation + "!";
	}

	//写在main函数里面的输出
	System.out.println(s.talk());
*/
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值