|
今天是教师节首先对全天下的教师说句:“您们辛苦了,教师节快乐!这里为您们送上一份礼物希望您能满意!”今天本菜鸟想讲一下与继承有关的多态性。当父类的某个方法被其子类重写时,可以各自产生自己的功能行为,同一个操作被不同类型对象调用时可能会产生不同的行为。
如 果一个类有很多子类,并且这些子类都重写了父类的某个方法,当我们把子类创建的对象的引用放到一个父类的对象中,就得到了该对象的一个上转型对象,那么这 个上转型对象在调用这个方法时就可能具有多种形态,因为不同的子类在重写父类的方法时可能产生不同的行为。例如如下这个例子,American的上转型对象调用“Speak”方法时产生的行为是“Happy Teacher's day”而Japanese的上转型对象调用“Speak”方法时产生的行为是“"教師の日、おめでとうございます”也就是说不同对象的上转型对象调用同一方法可能产生不同的行为。
例ExtendAndDuotai.java
//******************************************
abstract class People //定义了一个抽象类,不能用new创建对象,必须由子类创建对象。
{
public abstract void Speak(); //定义了一个抽象方法,只能声明,在子类中实现。
}
//***************************************
class American extends People //子类American继承了父类People
{
public void Speak() //实现父类中抽象方法
{
System.out.println("Happy Teacher's day");
}
}
//***************************************************
class Japanese extends People //子类Japanese继承了父类People
{
public void Speak() //实现父类中抽象方法
{
System.out.println("教師の日、おめでとうございます");
}
}
//******************************************************
class Chinese extends People //子类Chinese继承了父类People
{
public void Speak() //实现父类中抽象方法
{
System.out.println("教师节快乐!");
}
}
//*****************************************************
class ExtendAndDuotai //定义了一个主类,实现多态
{
public static void main(String args[])
{
People xiaochao; //父类声明了一个对象xiaochao
if(Math.random()<=0.33) // Math.random()产生0到1的随机数
{
xiaochao=new American(); // American类的上转型对象
xiaochao.Speak();
}
else if(Math.random()>0.33&&Math.random()<=0.66)
{
xiaochao=new Japanese(); // Japanese类的上转型对象
xiaochao.Speak();
}
else
{
xiaochao=new Chinese(); // Chinese类的上转型对象
xiaochao.Speak();
}
}
}
运行结果:
D:\java_homework1\classes>java ExtendAndDuotai
教師の日、おめでとうございます
D:\java_homework1\classes>java ExtendAndDuotai
教师节快乐!
D:\java_homework1\classes>java ExtendAndDuotai
Happy Teacher's day
|