初识JAVA-多态向上转型与向下转型
多态:
程序定义的引用变量所指向的具体的类和通过该变量发出的方法调用,在编程时并不确定,在程序运行时期间才被确定。
条件:
1.首先要有继承或接口的实现
2.子类要对父类的方法进行重写
这里我们先用一个列子来初始一下多态 这里使用到了向上转型后面我们会涉及到
这是运行的结果,我们会看到结果为“这是子类的方法”这说明调用的是子类的方法
静态绑定和动态绑定
首先我们先了解一下静态绑定 对于这几个关键词 static ,final, private 都应该有所了解吧 这里不过多说明,这里主要使用static修饰的方法举例。
对于动态绑定和静态绑定我个人的见解就是:
动态绑定:在编译时并无法确定调用哪个方法,而在程序运行时才知道
静态绑定:在编译时就知道
让我们看例子
这是运行后的结果:我们看到是“这是父类的方法”;说明调用的是父类的静态的方法。这里static修饰的方法,子类对其父类的方法重写毫无意义。
重载
首先重载是不是多态呢?
重载:方法名相同只不过方法的参数不同,但是编译器按照不同的参数对同名的方法进行修饰,使方法变得不同。
这里我们回头再看看多态:指子类重写父类的方法(虚方法)然后父类引用变量指向子类去调用方法时,编译器在编译时并无法确定调用了谁的方法。
多态就是对父类的方法重新定义,但并不改变方法的参数。
向上与向下转型
前面的例子我们用到的是向上转型就是父类引用变量指向子类调用子类的方法。这里的方法是子类父类共有的方法,但并不是子类特有的方法。
father f = new son();
f.show();//调用子类的方法
这里我们都可以理解,但是对于向下转型呢?
我的理解就是,如果继承子类但是通过父类引用变量去指向子类调用方法时,如果想要调用子类特有的方法是呢?这里我们就使用到向下转型
看一个例子
运行结果为子类特有的方法;
最后我们对与关键字instanceof使用讲解
在使用向下转型或向上转型的小伙伴,不免会对于父类所引用的变量指向的子类时会用改变量,去调用另一个子类的方法,这时使用instanceof他的返回值为Boolean类型可以判断是否为该类下引用的变量。
father f = new son;
if(f instanceof son)//若符合则返回true;
到这对于多态的相关问题就这些,可能本人能力有限,最主要的还是去多写写小项目去应用一下,这是我个人的理解,如有问题,希望可以多多指点。