天天看點

對象的上轉型對象,接口回調

初學者。

A類是B類的父類,當用子類建立一個對象,并把這個對象的引用放到父類的對象中,則稱對象a是對象b的上轉型對象。

一般來說,有兩種方法:

A a;
a = new B();
           

或:

A a;
B b = new B();
a = b;
           

上轉型對象不能操作子類新增的成員變量,不能調用子類新增的方法。舉個例子比較清楚:

class animal
{
	int m = 100;
	void print(String s)
	{
		System.out.println(s);
	}
}
class people extends animal
{
	double m = 25.5;
	void print(String s)
	{
		System.out.println("Look," + s);
	}
}
public class first
{
	public static void main(String args[])
	{
		/* 還可以 animal monkey;
		 *        people p = new people();
		 *        monkey = p;
		 */
		animal monkey;
		monkey = new people();
		
		System.out.println(monkey.m);   //對象monkey操作的是父類中的變量m
		monkey.print("I don't know.");  //對象monkey調用的是父類中的print()
	}
}
           

輸出:

100
Look,I don't know.
           

接口

接口聲明:interface 接口的名字

接口體中隻有抽象方法,未修飾方法預設為public abstract 方法。接口中隻有常量,不能有變量。未加final關鍵字修飾的,預設為常量。

一個類可以使用implements實作一個或者多個接口(這和類的繼承不同。java中類隻能單繼承)。一個類實作接口,必須重寫該接口中所有的方法,且必須遵守重寫規則,不可以降低方法權限。

公共接口可被任何一個類實作,友好接口隻能被同一個包中的類聲明實作。

如果一個類聲明實作一個接口,并沒有重寫接口中所有的方法,則這個類必須是abstract類。

舉個例子(包括接口回調):

interface Favourite
{
	void FavouriteFood();
	void FavouriteSport();
}
class Lee implements Favourite
{
	public void FavouriteFood()   //接口中的方法預設public abstract,重寫不能降低權限
	{
		System.out.println("Lee最愛牛肉");
	}
	public void FavouriteSport()
	{
		System.out.println("Lee最愛籃球");
	}
}
class Wang implements Favourite
{
	public void FavouriteFood()
	{
		System.out.println("Wang最愛米飯");
	}
	public void FavouriteSport()
	{
		System.out.println("Wang最愛足球");
	}
}
public class third
{
	public static void main(String args[])
	{
		//下面将進行接口回調,感覺跟一般對象調用方法時差不多
		Favourite m1 = new Lee();
		Favourite m2 = new Wang();
		m1.FavouriteFood();
		m2.FavouriteFood();
		m1.FavouriteSport();
		m2.FavouriteSport();
	}
}
           

輸出:

Lee最愛牛肉
Wang最愛米飯
Lee最愛籃球
Wang最愛足球
           

另外,補充一下方法重載與方法重寫。

class Aaaa
{
	double f(double x, double y)
	{
		return x + y;
	}
}
class Bbbb extends Aaaa
{
	double f(int x, int y)   //由于方法f()中參數發生了變化,這是方法重載。方法重寫的話,方法類型,方法名以及方法中參數都要與父類保持一緻
	{
		return x * y;
	}
}
public class val
{
	public static void main(String args[])
	{
		Bbbb b = new Bbbb();
		System.out.println(b.f(3, 5));
		System.out.println(b.f(3.0, 5.0));
	}

}
           

輸出:

15.0
8.0