多态介绍 和 多态的特点

多态介绍

现实中的同一个动作在不同的环境下有不同的状态

多态的实现:必须存在继承,存在重写,有父类引用指向子类对象

java中的多态:

  使用同一个引用类型,使用不同的实例而执行不同的操作,即父类引用指向了子类对象

 

public class OOPDemo01 {
    public static void main(String[] args) {
        CatMan a1 = new Bar();
        CatMan a2 = new Doc();
        CatMan a3 = new Actor();
        a1.cut();
        a2.cut();
        a3.cut();
    }
}

class CatMan{
    public void cut(){
        System.out.println("我也不知道干啥...");
    }
}

class Bar extends CatMan{
    @Override
    public void cut(){
        System.out.println("理发师:理发");
    }
}
class Doc extends CatMan{
    @Override
    public void cut(){
        System.out.println("医生:动手术");
    }
}
class Actor extends CatMan{
    @Override
    public void cut(){
        System.out.println("演员:暂停");
    }
}

 

多态的特点

在多态(父类引用指向子类的实现)的情况下,我们访问引用相关的成员(成员变量,成员方法,静态方法)时的情况

 

 

成员变量

在多态中,成员变量不存在覆盖的情况,在访问的时候直接访问父类中的属性(猫有九条命,能说动物有九条命吗?)

编译,运行看左边类型

 

 

 

 

 

 

 

成员方法

在多态里面,因为方法存在重写(覆盖),所以在访问的时候执行的是子类中的重写的方法

编写和运行看左边

构造方法

先执行父类的构造方法,帮助我们初始化父类的成员变量,然后在执行子类的构造方法中其他的代码来实现子类成员变量的初始化

public class OOPDemo01 {
    public static void main(String[] args) {
        //将一个子类的实现赋值给一个父类的引用
        CatMan a1 = new Bar();
        CatMan a2 = new Doc();
        CatMan a3 = new Actor();
        a1.cut();
        a2.cut();
        a3.cut();

        System.out.println(a1.age);
        System.out.println(a2.age);
        System.out.println(a3.age);

    }
}

class CatMan{
    int age = 10;
    public void cut(){
        System.out.println("我也不知道干啥...");
    }

    public CatMan(){
        System.out.println("父的构造方法");
    }

}

class Bar extends CatMan{
    int age = 18;
    @Override
    public void cut(){
        System.out.println("理发师:理发");
    }

    public Bar(){
        System.out.println("Bar 的构造方法");
    }

}
class Doc extends CatMan{
    int age = 33;
    @Override
    public void cut(){
        System.out.println("医生:动手术");
    }

    public Doc(){
        System.out.println("Doc 的构造方法");
    }

}
class Actor extends CatMan{
    int age = 20;
    @Override
    public void cut(){
        System.out.println("演员:暂停");
    }

    public Actor(){
        System.out.println("Actor 的构造方法");
    }
}

 

 

 

 

静态成员

在多态中,不会记错静态方法,因为静态方法时属于类的。所以在多态中我们调用静态方法会执行的也是父类的静态方法

编译和运行看左边

main{
CatMan.Count();
}




//父类中写入静态方法,子类同理
public static void Count(){ System.out.println("f33333333......"); }

 

 

 

 

 

 

 

 

 

 

 

 

 

posted @ 2022-06-18 14:39  魔光领域  阅读(73)  评论(0编辑  收藏  举报