Java学习(十七)

Posted 147258369k

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java学习(十七)相关的知识,希望对你有一定的参考价值。

Java多态的学习差不多有3个小时,老师还夹杂着一些编译器运用的知识。
这是多态的基本知识:
技术图片
我们可以创建父类引用指向子类对象,这就是多态的一种。(这种也叫向下转型)

Pet c=new Cat();//Pet是父类,Cat是子类
c.eat();

这样的话,如果Pet中有一个eat()的方法就会编译通过,否则会编译报错,因为该引用是Pet类型的。(静态绑定,编译阶段的绑定)
编译成功后会运行,需要Cat中有一个eat()类,否则会运行报错,因为该引用指向的对象是Cat。(动态绑定,运行阶段的绑定)
如果再加一行代码:
Dog d=(Dog)c;//把c强制转换成Dog类型
就会发生运行阶段的报错java.lang.ClassCastException(类型转换异常,总在向下转型时发生),因为JVM堆内存中c指向的对象是Cat,Cat对象不能转换成Dog对象,两种之间没有任何继承关系,所以会报错。
为了避免这种情况,我们可以使用instanceof运算符。
用法是
引用 instanceof 数据类型名
返回值是bool类型。
实践在最后。
这是多态的作用
技术图片
以前c++学多态的时候,就学的一个virtual,听得挺迷糊的,看了什么静态、动态绑定也不知道是什么意思,只会用。学了Java中的多态后,两相印证,现在清楚多了。
写代码用多态拓展起来确实会方便很多。
最后我实践了一下

package duotai;

public class Main {
    public static void main(String[] args){
        Valoran kk=new Valoran();
        Demacia gai=new Demacia();
        Knox nuo=new Knox();
        kk.shuo(gai);
        kk.shuo(nuo);
        if(gai instanceof Demacia)
        {
            System.out.println("盖伦是德玛西亚人");
        }
        else
        {
            System.out.println("盖伦出错啦");
        }
        if(nuo instanceof Knox)
        {
            System.out.println("诺手是诺克萨斯人");
        }
        else
        {
            System.out.println("诺手出错啦");
        }
    }
}

这是写的几个类,就不具体放上来了。
技术图片
运行结果:
技术图片





















以上是关于Java学习(十七)的主要内容,如果未能解决你的问题,请参考以下文章

孔维滢 20171010110《面向对象程序设计(java)》第十七周学习总结

Java基础学习笔记二十七 DBUtils和连接池

常惠琢 201771010102《面向对象程序设计(java)》第十七周学习总结

java SpringRetry学习的代码片段

张云飞 201771010143 《面对对象程序设计(java)》第十七周学习总结

201771010128王玉兰《面向对象与程序设计(Java)》第十七周学习总结