码迷,mamicode.com
首页 > 编程语言 > 详细

Java学习(十七)

时间:2020-07-04 01:03:48      阅读:69      评论:0      收藏:0      [点我收藏+]

标签:java学习   ceo   没有   使用   ring   instance   类对象   stat   lang   

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学习(十七)

标签:java学习   ceo   没有   使用   ring   instance   类对象   stat   lang   

原文地址:https://www.cnblogs.com/147258369k/p/13233352.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!