面对对象-多态



多态思想和特点

        //狗是动物类
        //一个对象有多种形态
        //一个表示自己的类,一个表示自己父类的类型
        //子类对象赋值给父类类型
        
        
        //多态运行时还是自己new出来的对象本身类
        Animal dog =new Dog();
        dog.eat();
        
        //子类对象赋值给父类类型
        //运行时,表现的是子类的特征(先去找子类)
        System.out.println(dog.getClass());//class _06面向对象.多态.Dog

eclipse快捷键
ctrl + + 放大屏幕
ctrl + - 缩小屏幕

多态的好处

instanceof关键字(懵逼)

        class Animal {
            void eat() {
                System.out.println("动物吃东西");
            }
        }

        class Dog extends Animal {
            void eat() {
                System.out.println("狗吃骨头");
            }
            void dowork() {
                System.out.println("汪汪汪");
            }
        }

        class Person{

            void feedAnimal(Animal anim) {//传入类型为Animal anim  
                System.out.println(anim.getClass());//得到真实类型
                anim.eat();
        
                if(anim instanceof Dog) {//判断传入的  anim  是否为Dog
                    Dog dog = (Dog)anim;  //因为 Dog 类是Animal的子类,传进来的时候,Dog dog不能接收父类的参数值,只能用强制类型转换来接收
                    dog.dowork();
                }else if(anim instanceof Cat) {
                    Cat as = (Cat)anim;
                    as.watch();
                }
    
            }
        }

        Animal dog = new Dog();

        类的强制类型转换:把父类对象赋值给子类类型
        instanceof:判断一个对象是否是指定的类,如果是  返回 true   不是的话返回false
        Dog dog = (Dog)anim;
        dog.dowork();

多态中字段注意点
字段不存在多态
字段前面对象是什么类型,就调用谁的.在编译的时候,就已经确定了要去调用谁的

        class SuperClass {
            String name = "sup-myxq";

            void myxq() {
                System.out.println("super的myxq");
            }
        }
        class SubClass extends SuperClass {
            String name = "sub-myxq";
            void myxq() {
                System.out.println("sub的myxq");
            }
        }
        SuperClass sub = new SubClass();
        System.out.println(sub.name);//调用的时候并不是表现出多态的特征,表现出的是super的特征
        //打印出来的是sup-myxq   

你可能感兴趣的:(面对对象-多态)