/*********************************************
* Time:2016年11月16日 21:27:11
* Purpose:多态的基础_1
* Author:ZJY
* Summary:子类可以当作父类来看待,但父类不能当
作子类看待;
* KnowledgePoint:
1.java中的继承不是现实中的继承,实际上java中
的继承反应的是一般到特殊的关系
2.父类代表一般,如:人;子类代表特殊,如:男人;
所以子类可以被当作父类来看待,因为男人一定
都是个人;但父类不能被当作子类来看待,因为
人不一定都是男人;
3.在程序中的理解:因为子类继承父类的属性和方法,
当把子类当作父类来看待时,因为子类包含了父类
的所有方法和属性,所以并没有冲突;而当把父类
当作子类来看待时,子类的特有的属性和方法父类
并没有,则与实际冲突,所以父类不能被当作子类
来看待。
*********************************************/
class A
{
public void f()
{
System.out.printf("AAAA\n");
}
}
class B extends A
{
public void f()
{
System.out.printf("BBBB\n");
}
}
public class TestPoly_1
{
public static void main(String[] args)
{
A aa1 = new A();
B bb1 = new B();
aa1.f();
bb1.f();
aa1 = bb1; //把bb1当作aa1来看待 子类可以被当作父类看待
//bb1 = aa1; // error //把aa1当作bb1来看待 父类不能被当作子类看待
aa1.f();
}
}
/*********************************************
* Time:2016年11月16日 22:29:54
* Purpose:多态的基础_2
* Author:ZJY
* Summary:多态:通过将子类的引用发送给父类的引用
实现调用父类的方法间接调用了子类的方法。
* KnowledgePoint:
1.多态的作用: 实现同一个方法在不同的地方处理的
内容不同;(实际上首先在子类中对从父类继承过来
的方法重写该方法,与之与父类中该方法的操作不
一样。然后将子类的引用发送给父类,当在发送之
前父类对应的引用调用的是父类中的该方法,但在
发送后,调用的则是子类中的方法。现实了同一个
方法在不同地方实现不同的操作的目的。)
*********************************************/
class A
{
public void f()
{
System.out.printf("AAAA\n");
}
}
class B extends A
{
public void f()
{
System.out.printf("BBBB\n");
}
}
public class TestPoly_2
{
public static void main(String[] args)
{
A aa1 = new A();
B bb1 = new B();
aa1.f(); //这个方法与下面的同名方法执行不同的处理
bb1.f();
/*aa1:A对象的引用,bb1:B对象的引用 */
aa1 = bb1;
aa1.f();
}
}