黑马程序员—5—Java基础:多态学习笔记和学习心得体会

时间:2022-02-09 15:41:39

  ------- <ahref="http://www.itheima.com" target="blank">android培训</a><ahref="http://www.itheima.com" target="blank">java培训</a>、期待与您交流! ----------


1.      多态:可以理解为事物存在的多种体现形态;

2.      多态的基本体现

父类的引用指向了自己的子类对象。父类的引用也可以接收自己的子类对象。

3.      多态的好处:

多态的出现大大提高程序的扩展性

4.      多态的前提

必须是类与类之间有关系,要么继承,要么实现。

通常还有一个前提:存在覆盖。

5.      多态弊端:

提高扩展性,但是只能使用父类的引用访问父类中的成员。

例子:

abstract class Animal

{

     Publicabstract void eat();

}

class Cat extends Animal

{

     Publicvoid eat()

    {

          System.out.println(“吃鱼”);

}

Public void catchMouse()

{

      System.out.println(“抓老鼠”);

}

}

class Dog extends Animal

{

     Publicvoid eat()

    {

          System.out.println(“吃骨头”);

}

Public void kanJia()

{

      System.out.println(“看家”);

}

 

}

class Pig extends Animal

{

     Publicvoid eat()

    {

          System.out.println(“食料”);

}

Public void gongDi()

{

      System.out.println(“拱地”);

}

 

}

 

 

class DuoTaiDemo

{

Public staticvoid main (String []  args)

{

    Animal a = new Cat();//l类型提升,向上转型

    a.eat();

    Cat c = (Cat)a;//强制将父类的引用,转成子类类型,向下转型。

    c.catchMouse();

  

    /*

     千万不要出现这样的操作,就是将父类对象转成子类类型。

     我们能转换的是父类应用指向了自己的子类对象时,该应用可以被提升,也可以被强制转化

      Animal a= new Animal();

      Cat c =(Cat)a;//这是错的,不能将父类转成子类类型

*/

   

    //System.out.println();

    function (new Cat());

    funntion (new Dog());

funntion (new Pig());

}

Public staticvoid function(Animal a)

{

a.eat();

if(ainstanceof Cat)//instancef 是判断某一类型是否符合某一类型,即Animal 符合//Cat

{

Cat c = (Cat)a;

c.catchMouse();

}

Else if (ainstanceof  Dog)

{

Dog c = (Dog)a;

c.kanJia();

}

}

}

6.      多态自始至终都是子类对象在做变化。

7.  if(a  instanceof Cat)//instancef 是判断某一类型引用是否符合某一类型,即Animal 符合//Cat

8.在多态中成员函数的特点:(非静态

  在编译时期:参阅引用型变量所属的类中是否有调用的方法,如果有,编译通过,如果

有编译失败。

在运行时期:参阅对象所属的类中是否有调用的方法。

简单总结:成员函数在多态调用时,编译看左边,运行看右边。

9.在多态中,成员变量的特点:

  无论编译和运行,都参考左边(引用型变量所属的类)。

10.在多态中:静态成员函数的特点:

  无论编译和运行,都参考左边。

11 学习心得和体会:

    千万不要出现这样的操作,就是将父类对象转成子类类型。

     我们能转换的是父类应用指向了自己的子类对象时,该应用可以被提升,也可以被强制转化


 

  ------- <ahref="http://www.itheima.com" target="blank">android培训</a><ahref="http://www.itheima.com" target="blank">java培训</a>、期待与您交流! ----------