Java笔记之多态的详解

版权声明:关注微信公众号:摸鱼科技资讯,联系我们 https://blog.csdn.net/qq_36949176/article/details/82944021

Java多态——提高代码的拓展性

简单说:就是一个对象对应着不同类型

多态在代码中的体现:父类或者接口的引用指向其子类的对象。

Animal a =子类对象;能调用父类里面子类共有的方法或者变量。

多态的好处:提高了代码的扩展性,前期定义的代码可以使用后期的内容。

多态的前提:

1、必须有关系、继承、实现

2、要有覆盖

abstract class Animal
{
   abstract void eat();
}

class dog extends Animal 
{
    void eat()
 {
     System.out.println("啃骨头");
 }
    void lookhome()
  {
    System.out.println("看家");
 }

}
class cat extends Animal
{
    void eat()
{
    System.out.println("吃鱼");
}
    void catchMouse()
{
     System.out.println("抓老鼠");   
}
}
class pig extends Animal
{
    void eat()
{
    System.out.println("吃饲料");
}
}

class DuotaiDemo
{
    public static void main (String[] args)
{
    cat c =new cat();
    dog d =new dog();
    method(c);
    method(d);
    method(new pig());
    
}
    public static void method(Animal a)
{
    a.eat();
}
}

Animal a =new cat(); //自动类型提升,猫对象提升了动物类型。但是特有功能无法访问。

//作业就是限制了对特有功能的访问

// 专业讲:向上转型

如果还想用具体动物猫的特头功能,你可以将该对象向下转型

向下转型的目的是为了使用子类中特有的方法。

cat c=(cat) a; // 向下转型的目的是为了使用子类中的特有方法。

c.eat(); c.catchMouse();

注意:对于转型,自始至终都是子类对象在做着类型的变化。

狗不能转化为猫,假设动物可以创建对象,动物也不能转化为猫。

转型就是,猫对象有两种类型,在这两种类型之间进行转化。

instanceof:用于判断对象的具体类型,只能用于引用数据类型判断 如:if(a instanceof Cat ){ }

多态时成员的特点:

1、成员变量(没有覆盖一说)

编译时:参考引用型变量所属的类中的是否有调用的成员变量,有,编译通过,没有,编译失败。

运行时:参考引用型变量所属的类中的是否有调用的成员变量,并运行该所属类中的成员变量。

简单说:编译和运行都参考等号左边。

2、成员函数(非静态)

编译时:参考引用型变量所属的类中的是否有调用的函数。有,编译通过,没有,编译失败。

运行时:参考的是对象所属的类中是否有调用的函数。

简单说:编译看左边,运行看右边

3、静态函数

编译时:参考引用型变量所属的类中的是否有调用的静态方法

运行时:参考引用型变量所属的类中的是否有调用的静态方法

简单说:编译和运行都看左边。

其实对于静态方法,是不需要对象的,直接用类名进行调用即可。

猜你喜欢

转载自blog.csdn.net/qq_36949176/article/details/82944021