专业的JAVA编程教程与资源

网站首页 > java教程 正文

java面向对象中多态容易走人的误区

temp10 2024-12-15 16:54:46 java教程 11 ℃ 0 评论

学习java的时候,我们知道面向对象的一个很重要的特征就是多态,多态顾名思义就是多变的、灵活的,

多态又依赖于继承、重写,

java面向对象中多态容易走人的误区

简单地记住多态就是:编译看左边,运行看右边,简单粗暴吧

如下面的例子

package com.mycloud.provider;
public class Mydemo {
    public static void main(String[] args) {
    	
    	//左边的类型均是parent
        Parent a=new Parent();
        a.do1();
        
        
        Parent b=new Son();
        b.do1();
        
        Parent g=new Grandson();
        g.do1();
    }
}
class Parent{
    public void do1(){
        do2();
    }
    public void do2(){
        System.out.println("parent");
    }
}
class Son extends Parent{
    public void do2(){
        System.out.println("son");
    }
}
class Grandson extends Son{
    public void do1(){
        super.do1();//调用父类的方法
    }
    public void do2(){
        System.out.println("grandson");
    }
}

这段代码的运行结果是什么呢?

分析:

粗略一看,a.do1():打印parent毫无疑问、b.do1()打印son 也没问题,g.do1呢?打印son么?

但事实的结果是:



看到吧,g.do1打印的却是 grandson

Grandson里面的do1不是调用了super.do1()吗,交给父类了吗?

只有体验才明白,或许我没有更好的解释,希望大家多琢磨,贡献宝贵的思考方式!

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表