【Java基础】第三章 接口(超级有助于理解,初学者必看!)

第三章 接口(超级有助于理解)

第二章我们看完了类和对象的概念,知道类其实是对于对象的一种抽象。回想我们过去的生活,我们会发现很多不同类的事物,会有着相同的行为,比如猫、狗和人类都会吃东西。那么是不是说我们可以定义一个吃东西的动作,再针对具体不同的动物,在这个动作里面加入特定的其他属性呢?这样是不是就把这个动作抽象出来了?感觉很规范,利于后期的修改呢?在Java里面,这种抽象的方法,由接口来实现。为了更好的理解,我们先写一个例子,在例子后面给出基础的语法。

一个例子

我们会在人生的某个阶段作为学生,但是学生并不是我们作为人的本质,只是一套行为和属性的集合而已。现在假设Student具有三个特点,这三个特点是TakeExam()、TakeClass()和ArrangeSpareTime()。我们有很多种不同的学生的特点,假设现在我们有一类学生叫做Wangxiaobo,他们是一类自由的学生,有WangStudent的特点,那么对于具体的这一类学生,我们怎么用接口的思想实现呢?

首先,我们先写一个学生的接口

package com.cjx1005;

public interface Student {
	String feature = "大有可为";
    public void TakeExam();
    public void TakeClass();
    public void ArrangeSpareTime();
}

//是不是很抽象嘻嘻

接着,我们写下WangStudent这类学生有什么特点

package com.cjx1005;

public class WangStudent implements Student{

	@Override
	public void TakeExam() {
		// TODO Auto-generated method stub
		System.out.println("我很喜欢考试,但是我不在意分数。因为考试有助于我们检测自己学习的情况,帮助我们更好的学习。");
	}

	@Override
	public void TakeClass() {
		// TODO Auto-generated method stub
		System.out.println("我喜欢数学、计算机、经济学和文学类的课程");
	}

	@Override
	public void ArrangeSpareTime() {
		// TODO Auto-generated method stub
		System.out.println("空闲时间我喜欢学习和完成自己的兴趣爱好");
	}
}

最后,我们写这一类学生的类

package com.cjx1005;

public class Wangxiaobo {
	public int age;
	public int rank;
	public int gender; //0代表女生,1代表男生
	Student studentIdentity;

	public void Excercise(String habit) {
		System.out.println("我最喜欢的锻炼是"+habit);
	}
	
	public void Writing(String author) {
		System.out.println("我喜欢写作,我最喜欢的作家是"+author);
	}
	
	public void StudentIdet(Student student){
		this.studentIdentity = student;
	}
	
	public void TakeExam() {
		studentIdentity.TakeExam();
	}
	
	public void TakeClass() {
		studentIdentity.TakeClass();
	}
	public void ArrangeSpareTime() {
		studentIdentity.ArrangeSpareTime();
	}
	public  static void main(String[] args){
		Wangxiaobo lilei = new Wangxiaobo();
		WangStudent freedom = new WangStudent();
		lilei.StudentIdet(freedom);
		lilei.Excercise("篮球");
		lilei.Writing("村上春树");
		lilei.TakeExam();
		lilei.TakeClass();
		lilei.ArrangeSpareTime();
	}
}

我们看看最后的输出结果

我最喜欢的锻炼是篮球
我喜欢写作,我最喜欢的作家是村上春树
我很喜欢考试,但是我不在意分数。因为考试有助于我们检测自己学习的情况,帮助我们更好的学习。
我喜欢数学、计算机、经济学和文学类的课程
空闲时间我喜欢学习和完成自己的兴趣爱好

几个很关键的步骤说明

在具体的类里面,需要传入具体的方式
就是这几行代码实现的

public void StudentIdet(Student student){
		this.studentIdentity = student;
	}
	
	public void TakeExam() {
		studentIdentity.TakeExam();
	}
	
	public void TakeClass() {
		studentIdentity.TakeClass();
	}
	public void ArrangeSpareTime() {
		studentIdentity.ArrangeSpareTime();
	}

这样,Wangxiaobo这个类的TakeExam()、TakeExam()和ArrangeSpareTime()的三个方法就是用的this.studentIdentity的了,而this.studentIdentity是根据外面的student传入的,而student的具体方法的书写其实是由WangStudent()来具体完成的。(如下)

WangStudent freedom = new WangStudent();
		lilei.StudentIdet(freedom);

一张图来直观的了解一下这个过程

在这里插入图片描述

基础语法

接口的基础语法

public interface 接口名{
 // 属性 默认由 final,static 修饰 - 静态常量 
 // 方法 没有方法体-抽象方法  默认 abstract 修饰
  // 属性 必须初始化,默认由 final,static 修饰
    String  name="namea";
    static final int num = 3;

    // 方法 - 没有方法体-抽象方法  默认 abstract 修饰
    public abstract void test();
}

对于具体的接口,用一种改写的思维进行具体的书写
关键词是implements,里面的重写检查注解就用@Override

心得总结

  • 接口的本质是:你可以调用接口,但是输入的参数是一个具体的类,但是这个类implements的是这个接口
  • 因此,只要有接口的话,必定存在自己写的一个类,并且在接口处,使用这个类,否则这个接口没有什么意义。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值