java重点 接口的理解

相信大家已经接触过Java了,看完接口的介绍 我还是一脸懵逼,这是学Java以来第一次感觉吃力的时候,相比之下 感觉接口很重要,现次将我的理解与大家分享。有哪些方面没有说到 还请大家多多谅解。微笑

首先举个简单的猫狗例子
“猫会撒娇 ,狗会看门”。假设这是这两个动物(类)与生俱来的能力(方法),然而有一些个经过特殊训练的猫猫和狗狗 打个比方 他们还会 算数和倒立,这个厉害吧。这些个猫猫狗狗不同于普通的猫狗。有了特殊的技能(方法),这时候为了把他们和普通的猫狗区别开,需要一个标志(接口),这个标志可以表明(含有)他们具有的特殊技能(方法),当他们带上这个标志(实现接口)后就可以达成区别他们的目标。

这里面的标志就是接口的一个特例,但是描述的又不完整,听我细细讲述:
我在想你是否理解接口大体上是干什么的了吧,如果是这样 我们来转述到Java方面:

接口:它是从多个类里面提取出来的特性或者说方法吧(和抽象类有着血缘关系,但是不近)但是他只能提取特性,具体实现特性 还得靠实现类本身
定义接口使用的是interface关键字 而不是class关键字
--------------------------------------------------------------------------------------------
[修饰符] interface 接口名
{
....
}
--------------------------------------------------------------------------------------------
接口里含有的方法只能是抽象方法(必须有),类方法,默认方法。还有常量,内部类,接口,枚举定义
默认方法:default关键字修饰的方法
类方法:static关键字修饰的方法
成员变量(常量):pubic static final 修饰 因为这些修饰符的关系 final修饰符 要求定义即赋值 以后不可再赋值 所以变量也就成为常量。
抽象方法:abstract关键字修饰的方法
既然接口里有抽象方法,我们在抽象类那边学习到抽象方法是没有方法体的,所以接口必须要靠另外一个类实现它的抽象方法
如果这个类实现了这个接口里的所有抽象方法 ,那么这个类就是接口的子类 这就是接口的实现,如果没有实现全部 ,那么这个类(因为没有实现全部抽象方法,所以他继承了上一个接口的抽象方法,所以呐,他就是一个抽象类咯,记得抽象类用什么关键字修饰?嗯哼)就变成了抽象方法。所以他也必须靠其他类来实现。

接口的继承么,通俗的讲,就是一个接口只要有extends关键字,他就可以拥有其他接口的成员啦。

继承接口靠关键字extends,接口实现靠关键字implement

实现类实现接口的格式:
-----------------------------------------------------------------------------------------------------
class 子接口【实现类】 implements 父接口1,父接口2,,,
{
。。。
}
------------------------------------------------------------------------------------------------------
继承的格式:
-----------------------------------------------------------------------------------------------------
interface 子接口 extends 父接口1,父接口2,,,
{
。。。
}
------------------------------------------------------------------------------------------------------
下来看一个实现接口的代码:
//定义动物培训接口
interface AnimalTrain {
	public abstract void jump();
}

//抽象类实现接口
abstract class Dog implements AnimalTrain {
}

//具体类实现接口
class Cat implements AnimalTrain {
       //实现父类接口的抽象方法
	public void jump() {
		System.out.println("猫会算数和倒立了");
	}
}

class InterfaceDemo {
	public static void main(String[] args) {
		//AnimalTrain是抽象的; 无法实例化 
		//AnimalTrain at = new AnimalTrain();
		//at.jump();
		
//多态的方式实现接口
		AnimalTrain at = new Cat();
		at.jump();
	}
}

说了这么多 那接口有什么用呢?
其实前面我已经说了接口的一个功能,你忘了么?
没错,他可以提取各个类的特性,这样你的代码就会变得简单容易看懂。
你若不信 我给你看一个实例:




这是代码:
/*
	教练和运动员案例(学生分析然后讲解)
		乒乓球运动员和篮球运动员。
		乒乓球教练和篮球教练。
		为了出国交流,跟乒乓球相关的人员都需要学习英语。
		请用所学知识:
		分析,这个案例中有哪些抽象类,哪些接口,哪些具体类。
	
	整个分析过程,我是通过画图讲解的。	
*/
//定义一个说英语的接口
interface SpeakEnglish {
	//说英语
	public abstract void speak();
}

//定义人的抽象类
abstract class Person {
	private String name;
	private int age;
	
	public Person() {}
	
	public Person(String name,int age) {
		this.name = name;
		this.age = age;
	}
	
	public String getName() {
		return name;
	}
	
	public void setName(String name) {
		this.name = name;
	}
	
	public int getAge() {
		return age;
	}
	
	public void setAge(int age) {
		this.age = age;
	}
	
	//睡觉
	public void sleep() {
		System.out.println("人都是要睡觉的");
	}
	
	//吃饭
	public abstract void eat();
}

//定义运动员抽象类
abstract class Player extends Person {
	public Player() {}
	
	public Player(String name,int age) {
		super(name,age);
	}
	
	//学习
	public abstract void study();
}

//定义教练抽象类
abstract class Coach extends Person {
	public Coach() {}
	
	public Coach(String name,int age) {
		super(name,age);
	}
	
	//教
	public abstract void teach();
}

//定义乒乓球运动员具体类
class PingPangPlayer extends Player implements SpeakEnglish {
	public PingPangPlayer(){}
	
	public PingPangPlayer(String name,int age) {
		super(name,age);
	}
	
	//吃
	public void eat() {
		System.out.println("乒乓球运动员吃大白菜,喝小米粥");
	}
	
	//学习
	public void study() {
		System.out.println("乒乓球运动员学习如何发球和接球");
	}
	
	//说英语
	public void speak() {
		System.out.println("乒乓球运动员说英语");
	}
}

//定义篮球运动员具体类
class BasketballPlayer extends Player {
	public BasketballPlayer(){}
	
	public BasketballPlayer(String name,int age) {
		super(name,age);
	}
	
	//吃
	public void eat() {
		System.out.println("篮球运动员吃牛肉,喝牛奶");
	}
	
	//学习
	public void study() {
		System.out.println("篮球运动员学习如何运球和投篮");
	}
}

//定义乒乓球教练具体类
class PingPangCoach extends Coach implements SpeakEnglish {
	public PingPangCoach(){}
	
	public PingPangCoach(String name,int age) {
		super(name,age);
	}
	
	//吃
	public void eat() {
		System.out.println("乒乓球教练吃小白菜,喝大米粥");
	}
	
	//教
	public void teach() {
		System.out.println("乒乓球教练教如何发球和接球");
	}
	
	//说英语
	public void speak() {
		System.out.println("乒乓球教练说英语");
	}
}

//定义篮球教练具体类
class BasketballCoach extends Coach {
	public BasketballCoach(){}
	
	public BasketballCoach(String name,int age) {
		super(name,age);
	}
	
	//吃
	public void eat() {
		System.out.println("篮球教练吃羊肉,喝羊奶");
	}
	
	//教
	public void teach() {
		System.out.println("篮球教练教如何运球和投篮");
	}
}

class InterfaceDemo {
	public static void main(String[] args) {
		//测试运动员(乒乓球运动员和篮球运动员)
		//乒乓球运动员
		PingPangPlayer ppp = new PingPangPlayer();
		ppp.setName("王浩");
		ppp.setAge(33);
		System.out.println(ppp.getName()+"---"+ppp.getAge());
		ppp.eat();
		ppp.sleep();
		ppp.study();
		ppp.speak();
		System.out.println("----------------");
		//通过带参构造给数据(留给你们)
		
		//篮球运动员
		BasketballPlayer bp = new BasketballPlayer();
		bp.setName("姚明");
		bp.setAge(34);
		System.out.println(bp.getName()+"---"+bp.getAge());
		bp.eat();
		bp.sleep();
		bp.study();
		//bp.speak(); //没有该方法
		
		//测试教练自己做

		//乒乓球教练
		PingPangCoach pi = new PingPangCoach();
		pi.setName("");
		pi.setAge();
		System.out.println("")
		pi.eat();
		pi.sleep();
		pi.study();
		pi.speak();
		System.out.println("----------------");
	}
}

不知道你看到这有木有弄清一些呢?如果你清除了我会很高兴的,好了故事讲到这里,到了时间讲拜拜。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值