点击(此处)折叠或打开
- package com.pp;
- //多态:父类的引用可以指向子类的对象.即子类的一个实例可以被父类引用。
- public class DDchild extends DDParent
- {
- public DDchild()
- {
- super(1);
- }
- public void run()
- {
- System.out.println("DDchild is runing");
- }
- /**
- * @param args
- */
-
- public static void main(String[] args) {
- // TODO Auto-generated method stub
- /*
- * 1.多态必须先理解封装和继承。
- * 2.多态不能单独看待。
- * 3.多态是运行时绑定的:也就是编译的时候,java编译器并不知道pp这个引用指向了哪一个对象。运行的时候才知道
- * 4.方法重载不是面向对象的特征。方法重载是编译时绑定。
- */
- DDParent pp = new Achild();//多态:父类的引用可以指向子类的对象.即子类的一个实例可以被父类引用。
- pp.run();//多态:run方法必须在父类存在!!因为pp这个引用类型是父类型的。
-
- /*片段1.start*******************************************/
- //Bchild bb = (Bchild)pp;
- /*Bchild bb = (Bchild)pp;编译可以通过,但是运行的时候报错,说明:
- * 1.多态是运行时绑定的:也就是编译的时候,java编译器并不知道pp这个引用指向了哪一个对象。运行的时候才知道
- * 2.运行的时候,java发现pp引用指向了Achild对象,那就不允许Bchild的引用指向Achild对象
- */
- /*片段1.end*******************************************/
-
- /*片段2.start*******************************************/
- DDParent Spp = new Bchild();
- pp = Spp;
- Bchild bb = (Bchild)pp;
- /*Bchild bb = (Bchild)pp;编译可以通过,而且运行的时候通过,说明:
- * 1.多态是运行时绑定的:也就是编译的时候,java编译器并不知道pp这个引用指向了哪一个对象。运行的时候才知道
- * 2.运行的时候,java发现pp引用指向了Spp所指向的Bchild对象,那就允许Bchild的引用指向Bchild对象
- */
- /*片段2.end*******************************************/
-
- /*片段3.start*******************************************/
- Achild acc = new Achild();
- DDParent pp3 = acc;//向上类型转换,子类型的对象(实例)被父类型的引用所指向。不需要显式指定。
- pp3.run();
- /*片段3.end*******************************************/
-
- /*片段4.start*******************************************/
- //向下类型转换,父类型的对象(实例)被子类型的引用所指向。必须需要显式指定。
- DDParent acc4 = new DDParent();
- Achild pp4 = (Achild)acc4;
- pp4.run();
- /*片段4.end*******************************************/
-
- }
-
- }
- class Achild extends DDParent
- {
- public Achild()
- {
- super(1);
- }
- }
-
-
- class Bchild extends DDParent
- {
- public Bchild()
- {
- super(1);
- }
- }
- class DDParent
- {
- int age = 50;
- int ttz = 170;
- public DDParent()
- {
- System.out.println("parent");
- }
- public DDParent(int i)
- {
- System.out.println("parent");
- }
-
- public void run()
- {
- System.out.println("Parent is runing");
- }
- }
- /*继承的特点:
- *1.父类有的,子类也有
- *2.父类没有的,子类可以增加
- *3.父类有的,子类可以改变
- */