Java 多态里面的知识点

1.在多态代码中访问成员变量

1. 访问成员变量
看等号左边是谁就先用谁的变量

public class Demo01Multi {
	    public static void main(String[] args) {
	        Fu zi = new Zi();
	        zi.num//优先使用父类的 如果不存在的话 继续往上找
	    		}
	
			}

2.访问成员方法
看是谁new的,就优先用谁,没有则向上找。

口诀:

成员变量: 编译看左边,运行还是看左边
成员方法:   编译看左边,运行还是看右边

2.对象的向上转型

对象的向上转型其实就是多态的写法:

父类名称 变量名  = new 子类名称();

例:

Animal animal = new Cat();

含义:

		右边创建一个子类对象,相当于父类来看

注意事项:

	由下往上很安全:类似与 基本数据类型之间的强制转换

这个是动物类

	package com.tjs.day10.demo09;
	
	/**
	 * @data 16:12
	 */
	public abstract  class Animal {
	    public abstract void eat();
	}

这个是猫-继承动物类

	package com.tjs.day10.demo09;


	public class Cat extends Animal{

    @Override
    public void eat() {
        System.out.println("猫吃肉");
	    }
	}

实例对象

package com.tjs.day10.demo09;

/**
 * @data 16:14
 */
public class Demo09Mult {
    public static void main(String[] args) {
        Animal animal = new Cat();
        animal.eat();
    }
}

输出的是:

猫吃肉

3.对象的向下转型

对象向下转型,其实是一个还原的动作;
格式:

	(子类名称) 对象名 = (子类名称) 需要转换的对象名;

例: Cat cat = (Cat) animal;

含义:

	将父类对象,还原成本来的子类对象

注意事项:
a. 必须保证对象还原的是创建时候的类,如:猫 , 才能转换为猫 而不是狗,等等
b. 如果对象创建的时候不是猫,还原时还原成猫–编译的时候不报错 运行的时候报错
ClassCastException

4.使用instanceof判断向下转型

在向下转型时需要判断原本是什么类

实现代码如下:

package com.tjs.day10.demo09;

/**
 * @data 16:14
 */
public class Demo09Mult {
    public static void main(String[] args) {
        Animal animal = new Cat();//定义一只猫

        //向下转型
        if(animal instanceof Cat){
            Cat cat = (Cat) animal;
            cat.sleep();
        }

        if(animal instanceof Dog){
            Dog dog = (Dog) animal;
            dog.cathHome();
        }
        giveMeAPet(new Dog());
    }
    public static void giveMeAPet(Animal animal){

        //用处
        if(animal instanceof Cat){
            Cat cat = (Cat) animal;
            cat.sleep();
        }

        if(animal instanceof Dog){
            Dog dog = (Dog) animal;
            dog.cathHome();
        }
    }

}

当中演示了多态的用法,比如女朋友需要一只动物不管是什么动物都可以,
然后传入一只狗进去用instanceof,判断是否原本子类是否是狗。

你可能感兴趣的:(Java)