接口(interface)與多態

1. 接口(interface)是抽象方法與常量值的集合;java

2. 從本質上來說,接口是一種特殊的抽象類,這種抽象類中只包含常量與方法的定義,而沒有變量和方法的實現;ide

3. 接口中聲明的屬性默認爲:public static final,也只能是:public static final,(接口中成員變量的定義);this

4. 接口中只能定義抽象方法,並且這些方法默認爲public,也只能是public的;對象

5. 接口能夠繼承其餘的接口,並添加新的屬性和抽象方法;blog

6. 多個無關的類能夠實現同一個接口,一個類能夠實現多個無關的接口;繼承

7. 與繼承關係相似,接口與實現類之間存在多態性:接口

    多態的三個條件:繼承,重寫,父類引用指向子類對象;get

    因爲Java中沒有多繼承,一個類只能有一個父類。一個父類能夠有多個子類,而在子類裏能夠重寫父類的方法;class

    用接口能夠實現多繼承,一個類或是能夠同時實現多個接口;變量

    通常而言,接口有利於代碼的擴展,而繼承則有利於代碼功能的修改

8. Demo

Demo_1

public interface Runner{
	int id = 1; // 至關於:public static final int id = 1;
	public void start();
	public void run();
	public void stop();
}
// 正確

 Demo_2

interface Singer{
	public void sing();
	public void sleep();
}

class Sudents implements Singer{
	private String name;
	
	public Sudents(String name) {
		this.name = name;
	}
	public void study(){
		System.out.println("Studying");
	}
	public String getName(){
		return name;
	}
	public void sing() { // @Override
		System.out.println("Student is Singing");
	}
	public void sleep() { // @Override
		System.out.println("Student is sleping");
	}
}
// 正確

 Demo_3

interface Singer{
	public void sing();
	public void sleep();
}
interface Painter{
	public void paint();
	public void eat();
}
class Student implements Singer{
	private String name;
	public Student(String name) {
		this.name = name;
	}
	public void study(){
		System.out.println("studying");
	}
	public String getName(){
		return name;
	}
	public void sing() { // @Override
		System.out.println("student is singing");
	}
	public void sleep() { // @Override
		System.out.println("student is sleeping");	
	}
}
class Teacher implements Singer, Painter{
	private String name;
	public Teacher(String name) {
		this.name = name;
	}
	public String getName(){
		return name;
	}
	public void teach(){
		System.out.println("teaching");
	}
	public void paint() { // @Override
		System.out.println("teacher is painting");
	}
	public void eat() { // @Override
		System.out.println("teacher is eating");
	}
	public void sing() { // @Override		
		System.out.println("teacher is singing");
	}
	public void sleep() { // @Override
		System.out.println("teacher is sleeping");
	}
}
public class Test {
	public static void main(String[] args){
		Singer s1 = new Student("s1");
		s1.sing();
		s1.sleep();
		Singer t1 = new Teacher("t1"); //至關於繼承中的父類引用指向子類對象
		t1.sing();
		t1.sleep();
		Painter p1 = (Painter) t1; //至關於繼承中的父類引用指向子類對象
		p1.paint();
		p1.eat();
	}
}
// 正確

 Demo_3的運行結果:

     student is singing     student is sleeping     teacher is singing     teacher is sleeping     teacher is painting     teacher is eating

相關文章
相關標籤/搜索