JavaSE_24th_接口

一、接口(interface)
当一个抽象类中所有的方法都是抽象方法,所有的变量都是静态常量(static final),这时可以把该抽象类定义为接口,接口是一种特殊的抽象类,接口没有构造方法,也不能被
实例化,一个类使用implements关键字实现一个接口。

1、接口是抽象方法和常量值的定义的集合。
接口定义举例:
public interface Runner {
	//接口中的变量都是静态常量,因此可简写为int id = 1;
	public final static int id = 1;
	
	/* 由于是接口,在定义方法时不需要像抽象类一样加abstract关键字
	*/
	public void start();
	public void run();
	public void stop();
}

2、从本质上讲,接口是一种特殊的抽象类,这种抽象类中只包含常量和方法的定义,而没有变量和方法的实现。


3、接口的特性:
1)多个无关的类可以实现同一个接口。
public interface Lock {
	public void lockUp();	//上锁功能
	public void openLock();	//开锁功能
}

/**
 * 防盗门 类
 */
public class FtproofDoor implements Lock {
	@Override
	public void lockUp() {
		System.out.println("插进钥匙,向左旋转钥匙三圈,锁上了,拔出钥匙。");
	}
	@Override
	public void openLock() {
		System.out.println("插进钥匙,向右旋转钥匙三圈,锁打开了,拔出钥匙。");
	}
}

/**
 * 智能手机 类
 */
public class AptitudeHandset implements Lock {
	@Override
	public void lockUp() {
		System.out.println("手指按下电源键,手机锁上了。");
	}
	@Override
	public void openLock() {
		System.out.println("手指放在Home键上,手机解锁了。");
	}
}

总结:多个无关的类可以实现同一个接口。


2)一个类可以实现多个无关的接口。
与3)同例:
3)继承关系类似,接口与实现类之间存在多态性。
/**
 * 能唱歌的东西 接口
 */
interface Sinner {
	public void sing();
	public void sleep();
}

/**
 * 能画画的东西 接口
 */
interface Painter {
	public void paint();
	public void eat();
}

/**
 * 学生 类
 */
class Student implements Sinner {
	private String name;
	Student(String name) { this.name = name; }
	public void study() { System.out.println("studying"); }
	public String getName() { return name; }
	
	public void sing() {
		System.out.println("student is singing");
	}
	public void sleep() {
		System.out.println("student is sleeping");
	}
}

/**
 * 老师 类
 */
class Teacher implements Sinner,Painter {
	private String name;
	Teacher(String name) { this.name = name; }
	public String getName() { return name; }
	public void teach() { System.out.println("teacher is teaching"); }
	
	public void sing() {
		System.out.println("Teacher is singing");
	}
	public void sleep() {
		System.out.println("Teacher is sleep");
	}
	public void paint() {
		System.out.println("Teacher is painting");
	}
	public void eat() {
		System.out.println("Teacher is eating");
	}
}

public class TestInterface {
	public static void main(String[] args) {
		Sinner s1 = new Student("le");
		s1.sing();
		s1.sleep();
		Sinner s2 = new Teacher("steven");
		s2.sing();
		s2.sleep();
		Painter p1 = (Painter)s2;
		p1.paint();
		p1.eat();
	}
}

运行结果:

student is singing
student is sleeping
Teacher is singing
Teacher is sleep
Teacher is painting
Teacher is eating
总结:

a、继承关系类似,接口与实现之间存在多态性。
b、一个类可以实现多个无关的接口(Teacher类实现了两个Sinner和Painter这两个无关的接口)。
c、指向子类对象的A接口的引用,可以强制类型转换为接口B类型,将地址值传递给
接口B的引用后,接口B的引用就同样可以指向子类对象,实现多态。
即Sinner s2 = new Teacher();
Painter p1 = (Painter)s2;
p1.paint(); //多态机制,调用子类重写的方法。

4)接口不能被实例化,因此没有构造方法。
5)接口中声明属性默认为public static final的,也只能是public static final。
6)接口中只能定义抽象方法,而且这些方法默认为public的,也只能是public的。

7)与类的继承一样,接口可以使用extends关键字继承其它的接口,并添加新的属性和方法。

8)一个类可以在继承一个父类的同时并实现多个接口。

package com.hpe.interfa;

public interface Valuable {
	public double getMoney();
}

interface Protectable {
	public void beProtected();
}

/* 接口和接口之间只能是继承关系 */
interface A extends Protectable {
	void m();
}

abstract class Animal {
	private String name;
	
	abstract void enjoy();
}
/* 一个类可以在继承类的同时实现多个接口 */
class GoldenMonkey extends Animal implements Valuable, Protectable {
	public void enjoy() {}
	public double getMoney() { return 10000; }
	public void beProtected() {
		System.out.println("I live in the room.");
	}
	public void test() {
		/* 1.父类引用指向子类对象 */
		Valuable v = new GoldenMonkey();
		/* 多态机制,调用子类方法 */
		v.getMoney();
		/* 2.强制类型转换,跳到子类内部的另一个父类 */
		Protectable p = (Protectable)v;
		/* 多态机制,调用子类方法 */
		p.beProtected();
		/* 3.强制类型转换,跳到子类内部的另一个父类 */
		Animal a = (Animal)p;
		/* 多态机制,调用子类方法 */
		a.enjoy();
	}
}

/*
 * 一个类实现了一个接口,如果该接口继承至另一个接口,
 * 那么该类必须实现两个接口中的所有方法
 */
class Hen implements A {
	public void m() {}
	public void beProtected() {}
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值