028-86922220

建站动态

根据您的个性需求进行定制 先人一步 抢占小程序红利时代

第13讲面向对象三大特征之多态-创新互联

第13讲

创新互联专注为客户提供全方位的互联网综合服务,包含不限于成都做网站、成都网站制作、成都外贸网站建设、涟水网络推广、小程序定制开发、涟水网络营销、涟水企业策划、涟水品牌公关、搜索引擎seo、人物专访、企业宣传片、企业代运营等,从售前售中售后,我们都将竭诚为您服务,您的肯定,是我们大的嘉奖;创新互联为所有大学生创业者提供涟水建站搭建服务,24小时服务热线:13518219792,官方网址:www.cdcxhl.com1 多态简述

同一个对象,在不同时刻表现出来的不同形态就叫多态

多态的形式:

2 多态的使用前提3 多态中成员访问特点
public class Animal() {public int height = 10;
    
    public void eat() {Sout: "动物吃东西";
    }
}

class Cat extends Animal() {public int height = 20;
    public int weight = 40;
    
    @Override
    public void eat() {Sout: "猫吃鱼";
    }
    
    public void play() {Sout: "猫玩老鼠";
    }
}
3.1 成员变量

编译看左边,运行看左边 (因为成员变量没有重写)

  1. 编译看左边:javac在编译代码的时候,会看左边(父类)有没有这个成员变量
  2. 运行看左边:java在运行代码的时候,会拿左边(父类)的成员变量的值作为最终值
public class Demo() {public static void main(String[] args) {Animal ani = new Cat();
    
        Sout: ani.height;// 输出:10  (来自父类)
        
    	Sout: ani.weight;// 报错,因为Animal类里没有成员变量weight
    }
}
3.2 成员方法

编译看左边,运行看右边 (因为成员方法有重写)

  1. 编译看左边:javac在编译代码的时候,会看左边(父类)有没有这个成员方法
  2. 运行看右边:java在运行代码的时候,会拿右边(子类)的成员方法作为最终值
public class Demo() {public static void main(String[] args) {Animal ani = new Cat();
        
    	ani.age();// 输出:猫吃鱼 (来自子类)
    	
    	ani.play();//报错,因为Animal类没有成员方法play()
    }
}
4 多态的利与弊 好处弊端
public class Demo() {public static void main(String[] args) {Animal ani = new Cat();
        
    	ani.age();// 输出:猫吃鱼 (来自子类)
    	
    	ani.play();//报错,因为Animal类没有成员方法play()
    }
}

class Animal() {public int height = 10;
    
    public void eat() {Sout: "动物吃东西";
    }
}

class Cat extends Animal() {public int height = 20;
    public int weight = 40;
    
    @Override
    public void eat() {Sout: "猫吃鱼";
    }
    
    public void play() {Sout: "猫玩老鼠";
    }
}
5 多态的转型 5.1 向上转型(自动类型转换)

从子到父

//向上转型
Animal ani = new Cat();	
5.2 向下转型(强制类型转换)

从父到子

作用: 可以转为真正的子类类型,从而调用子类独有的功能

转换类型与真实对象类型不一致的时候会报错,所以:

转型需谨慎,要加以判断:

语法:a instanceof B//变量a是不是B类型,如果是,返回true

public class Demo() {public static void main(String[] args) {Animal ani = new Cat();
        
        //ani是不是猫类型?是就转型,不是就不转
        if(ani instanceof Cat) {//向下转型
            Cat cat = (Cat)ani;
            
            //此时就可以用子类的特有功能
            cat.play();
        } else {System.out.println("没有该类型,无法转换");
        }
    }
}

关于强转前的判断,jdk14以后有新特性:

语法:a instanceof B b

​ //变量a是不是B类型,如果是,则强转为B类型,转换后的变量名更改为b;如果不是不强转,结果为false

if(ani instanceof Cat cat) {cat.play();
} else {System.out.println("没有该类型,无法转换");
}

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


当前题目:第13讲面向对象三大特征之多态-创新互联
网站路径:http://www.tsicrk.com/article/degjjg.html

其他资讯

让你的专属顾问为你服务

2.3217s