思想有多大,舞台就有多大

父类应用指向子类对象指的是:

Cat

Animal animal= new Cat();

声明的为父类,实际指向的是子类对象。我们先从内存角度理解。

通过代码看内存分配:

. Cat cat2=

以上是从内存的角度进行分析的。

从对象的角度看问题

我们先看几个关键词:多态,动态链接,向上转型

封装:隐藏了类的内部实现机制,可以在不影响使用者的前提下修改类的内部结构,同时保护了数据;

继承:是为了重用父类代码,子类继承父类就拥有了父类的成员。

方法的重写、重载与动态连接构成多态性。理解多态,首先要知道“向上转型”(子类转为父类)。

Catc = new Cat(); 实例化一个Animal a = new Cat(); 这代表什么意思呢?

那么这样做有什么意义呢?

◆那什么是动态链接呢?

当父类方法子类未重写,调用父类;若子类重写父类方法,调用子类方法,这就是动态连接。

class Father{ Public void func1(){Func2();}Public void fun2(){System.out.println("AAA");}}Class Child extends Father{Public void func1(int i){System.out.println("BBB");}Public void func2(){System.out.println("CCC");}}Public class Test{Public static void mian(String [ ]args){Father child= new Child();child.func1();//打印结果将会是什么?child.func1(89);//?该方法会怎样呢?}}class Child extends Father{       //func1(int i)是对func1()方法的一个重载,主要不是重写!      public void func1(int i){           System.out.println("BBB");       }       //func2()重写了父类Father中的func2()方法       //如果父类类型的引用中调用了func2()方法,那么必然是子类中重写的这个方法       public void func2(){           System.out.println("CCC");       }   }       public class PolymorphismTest {       public static void main(String[] args) {           Father child = new Child();           child.func1();//打印结果将会是什么?            child.func1(68);  //由于在父类中没有定义这个方法,所以它不能被父类类型的引用调用   //所以在child.func1(68)会跑出异常的     }   }  

上面的程序是个很典型的多态的例子。子类Child继承了父类Father,,并重载了父类的func1()方法,重写了父类的func2()方法。重载后的func1(inti)和func1()不再是同一个方法,由于父类中没有func1(int i),那么,父类类型的引用child就不能调用func1(inti)方法。而子类重写了func2()方法,那么父类类型的引用child在调用该方法时将会调用子类中重写的func2()。

小结:

既有美妙的风景,也会有称不上景只有风的地方。

思想有多大,舞台就有多大

相关文章:

你感兴趣的文章:

标签云: