多态

1.多态概述

同一个对象在不同时刻表现出的不同形态

多态的前提和体现:

  • 有继承/实现关系
  • 有方法重写
  • 有父类引用指向子类对象(Animal a = new Cat();)

2.多态中的成员访问特点

  • 成员变量:编译看左边,执行看右边
  • 成员方法:编译看左边,执行也看左边

为什么成员变量和成员方法的访问不一样呢?

  • 因为成员方法有重写,而成员变量没有.

示例:

父类

package com.itheima_06;

public class Animal {
public int age = 40; public void eat(){
System.out.println("动物吃东西");
}
}

子类

package com.itheima_06;

public class Cat extends Animal {
public int age = 10;
public int weight = 15; @Override
public void eat() {
System.out.println("猫吃鱼");
} public void playGame(){
System.out.println("猫捉迷藏");
}
}

测试类

package com.itheima_06;

public class AnimalDemo {
public static void main(String[] args) {
//有父类引用指向子类对象
Animal a = new Cat(); System.out.println(a.age);
// System.out.println(a.weight); 报错 成员变量编译和运行都看左边
a.eat(); //多态中的成员方法,编译看左边,运行看右边
//a.playGame(); 报错
}
}

3.多态的好处和弊端

多态的好处:提高了程序的扩展性

集体体现:定义方法的时候,使用父类型作为参数,将来在使用时,使用具体的子类型参与操作

多态的弊端:不能使用子类的特有功能

//动物操作类
public class AnimalOperator {
/*
public void useAnimal(Cat c){
c.eat();
} public void useAnimal(Dog d){
d.eat();
} */
//传入的参数采用Animal就不用每次新建一个类就为他新定义一个方法
public void useAnimal(Animal a) {
//Animal a = new Cat();
//Animal a = new Dog();
a.eat();
}
}
//测试类
public class AnimalDemo {
public static void main(String[] args) {
//创建动物操作类的对象,调用方法
AnimalOperator animalOperator = new AnimalOperator();
Cat c = new Cat();
animalOperator.useAnimal(c); Dog d = new Dog();
animalOperator.useAnimal(d);
}
}

4.多态中的转型

  • 向上转型
  • 向下转型
public class AnimalDemo {
public static void main(String[] args) {
//向上转型
Animal a = new Cat();
a.eat();
//不能调用子类的特有方法play() //向下转型
Cat c = (Cat)a;
//可以调用子类中的特有方法play了
c.play();
}
}

最新文章

  1. asp.net mvc 绑定客户端post过来的复杂JSON数据
  2. eclipse设置汉化
  3. 详解APM数据采样与端到端
  4. 选择一本C++教材
  5. 【阿里云产品公测】离线归档OAS,在也不用备份担心空间了
  6. HTTP Header 详解【转】
  7. UILabel设置行间距和字间距并计算高度-b
  8. POJ_3273_Monthly_Expense_(二分,最小化最大值)
  9. CSS实例:水平居中和垂直居中的多种解决方案
  10. Day02——widow对象
  11. linux环境下搭建 j2ee环境
  12. Swift_语法的熟悉
  13. HTTP错误代码大全
  14. centos6.3部署配置LVS主从
  15. MySQL 查看修改字符集
  16. el表达式获取对象属性值 返回值类型
  17. Spring Cloud(Dalston.SR5)--Hystrix 断路器
  18. Javascript Jquery 中的数组定义与操作
  19. 管道与popen函数与重定向
  20. fstrict-aliasing

热门文章

  1. The Semantics of Constructors——2.4 成员初始化列表
  2. ssh 远程报错 Permission denied, please try again.(密码输入正确也无法登录)
  3. Linux 文件编码操作enca[适用Mac]
  4. 修改系统hosts文件访问github
  5. 吴恩达老师机器学习课程chapter03——过拟合与正则化
  6. PHP 中的类-什么叫类
  7. Github的.gitignore忽略文件
  8. nginx的301与302跳转详细配置教程
  9. 域名证书https配置问题
  10. angular的发布订阅