初學者。
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