概念:同一操作作用于某一类对象,可以有不同的解释,产生不同的执行结果

多态存在的三个必要条件

  •   需要存在继承和实现关系
  •   同样的 方法调用而执行不同操作,运行不同的代码(重写操作)
  •   在运行时父类或者接口的引用变量可以引用其子类的 对象
package com.tanlei.newer;

public class AnimalDemo {
public static void main(String[] args) {
Animal animal=new Dogg("哈哈");
Animal animal2=new Cat("花花");
animal.eat();
animal2.eat();
}
} class Animal {
private String name; public Animal(String name) {
this.name = name;
} // 这是一个通用方法
// 只是告诉其子类去实现它
public void eat() { } } class Dogg extends Animal { public Dogg(String name){
super(name);
}
public void eat() {
System.out.println("狗啃骨头");
}
} class Cat extends Animal {
public Cat(String name){
super(name);
}
public void eat() {
System.out.println("猫吃鱼");
}
}

对象上下转型

向上转型  子类 --->父类

Animal animal=new Dogg("哈哈");//向上转型
//向上转型 安全 但可能会导致子类的方法丢失
//父类的引用变量只能调用父类中有的方法或者子类重写的方法

  

向下转型   父类--->子类

 //向下转型  不安全
if(animal2 instanceof Cat) {
Cat cat=(Cat)animal2;
cat.sleep();
}

  

instanceof

用法:

  

object instanceof   class    / /object是class或其子类的一个实例

  

动态绑定

编译前绑定   (静态绑定)

Person.sayHi();

  

运行时,根据变量实际引用的对象类型决定调用哪个方法(动态绑定)

Person p =new Teacher();

p.sayHi();

多态案例---使用多态实现士兵作战下程序

package com.tanlei.newer;

public class SoldierDemo {
public static void main(String[] args) {
Soldier soldier=new KJSolider("TANL", 22);
soldier.attack();
Soldier soldier1=new KJSolider("aa", 22);
soldier1.attack();
Soldier soldier2=new KJSolider("ccc", 22);
soldier2.attack();
}
} abstract class Soldier{
private String name;
private int age;
public Soldier(String name, int age) {
this.name = name;
this.age = age;
}; public String getName() {
return name;
} //所有部队行动
public void gongji() {
start();
attack();
end();
} public void start() {
System.out.println("准备攻击");
}
public void end() {
System.out.println("攻击完成");
} public abstract void attack();
} //海军
class HJSolider extends Soldier{ public HJSolider(String name, int age) {
super(name, age); } public void attack() {
System.out.println(getName()+"海军打海炮");
}
} //空军
class KJSolider extends Soldier{
public KJSolider(String name, int age) {
super(name, age); } public void attack() {
System.out.println(getName()+"空军发炮");
}
} //陆军
class LJSolider extends Soldier{
public LJSolider(String name, int age) {
super(name, age); } public void attack() {
System.out.println(getName()+"陆军打炮");
}
}

  

Java面向对象----多态概念,对象上下转型的更多相关文章

  1. Java面向对象多态

    Java面向对象多态 7.2对象 7.2.1创建对象 对象是类的实例 类的名称 对象名称 = new 类的名称(); 7.3继承 继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域 ...

  2. Java面向对象-类与对象

    Java面向对象-类与对象 类与对象的关系 我们通俗的举个例子,比如人类是一种类,张三这个人就是人类的具体的一个个体,也就是java中的对象:这就是一个类与对象的关系: 类的定义 下面看实例 类的创建 ...

  3. Java面向对象--类和对象

    面向对象是相对于面向过程而言的,是软件开发方法.面向对象把相关的数据和方法组织为一个整体来看待,从更高的层次来进行系统设计,更贴近事物的自然运行模式.本篇博客介绍Java面向对象的类和对象 目录: 面 ...

  4. -1-2 java 面向对象基本概念 封装继承多态 变量 this super static 静态变量 匿名对象 值传递 初始化过程 代码块 final关键字 抽象类 接口 区别 多态 包 访问权限 内部类 匿名内部类 == 与 equal

    java是纯粹的面向对象的语言 也就是万事万物皆是对象 程序是对象的集合,他们通过发送消息来相互通信 每个对象都有自己的由其他的对象所构建的存储,也就是对象可以包含对象 每个对象都有它的类型  也就是 ...

  5. java面向对象1-面向对象概念

    面向对象概念-类与对象的关系 封装:指隐藏对象的属性和实现细节,仅对外提供公共访问方式,private-构造方法/构造器-this关键字-static关键字(javadoc制作工具类) -代码块 继承 ...

  6. JAVA面向对象-多态的理解

    面向对象编程有三个特征,即封装.继承和多态. 封装隐藏了类的内部实现机制,从而可以在不影响使用者的前提下改变类的内部结构,同时保护了数据. 继承是为了重用父类代码,同时为实现多态性作准备.那么什么是多 ...

  7. ​Java面向对象的概念整理

    Java中一切皆是对象! 注意:8种基本数据类型不支持面向对象的编程机制,基本数据类型的数据也不具备“对象”的特性:没有成员变量.方法可以被调用. 为解决8种基本数据类型不能当成Object类型(所有 ...

  8. Java面向对象——类,对象和方法

    1.类的概念 在生活中,说到类,可以联想到类别,同类,会想到一类人,一类事物等等.而这一类人或事物都是具有相同特征或特点和行为的,我们根据不同的特征或特点和行为将他们归类或分类.同时,当我们认识一个新 ...

  9. Java面向对象-------多态总结

    1.多态:是同一个行为具有多个不同表现形式或形态的能力. 多态就是同一个接口,使用不同的实例而执行不同操作,如图所示: 多态性是对象多种表现形式的体现. 2.多态作用: 1. 消除类型之间的耦合关系 ...

随机推荐

  1. 关于Python3 打印中文乱码问题

    解决方案有两种: 在命令行前指定编码 $ PYTHONIOENCODING=utf-8 python test.py hello world 你好,世界 在代码中指定编码 import io impo ...

  2. Mathtype部分数学符号不能显示,只能显示方框时的解决办法

    解决方法:打开C:\WINDOWS\Fonts,若里面有MT Extra(TrueType)字体或其快捷方式,则将其删除,再把MathType安装目录下\MathType 6.0\Fonts\True ...

  3. 【html、CSS、javascript-3】几个基本元素

    HTML 元素指的是从开始标签到结束标签的所有代码. 开始标签 元素内容 结束标签 <h1> h标签用来表示标题 </h1> <p> p标签表示一个段落 </ ...

  4. 【python之路32】python异常处理

    一.捕获异常 1.try  except #!usr/bin/env python # -*- coding:utf-8 -*- num = input("请输入一个数字:") t ...

  5. 本地文件访问json数据格式,在chrome中没反应

    原因:存在跨域问题 在JavaScript的安全性上,有一条很重要的安全限制,叫“同源策略”.就是一个脚本只能读取与它同源(如由同一个主机下载,通过同一个端口下载或者下载协议相同)的窗口或者文档的属性 ...

  6. pc端样式重置以及常用样式规范class

    //reset html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a ...

  7. 你不知道的javascript -- 数据类型

    1. 数据类型 在js中有7中数据类型 其中6种是基本类型 包括 null, undefined, boolean, number, string和symbol,还有一种是引用类型object 但是判 ...

  8. jeecms9自定义标签以及使用新创建的数据库表

    转载 https://blog.csdn.net/nice_meng/article/details/89179089 本系统使用的是jeecmsv9版本,收集网上知识后,进行个人汇总 首先,自己创建 ...

  9. golang标准库中有些函数只有签名没有函数体是怎么回事?

  10. R语言基础画图/绘图/作图

    R语言基础画图/绘图/作图 R语言基础画图 R语言免费且开源,其强大和自由的画图功能,深受广大学生和可视化工作人员喜爱,这篇文章对如何使用R语言作基本的图形,如直方图,点图,饼状图以及箱线图进行简单介 ...