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

多态存在的三个必要条件

  •   需要存在继承和实现关系
  •   同样的 方法调用而执行不同操作,运行不同的代码(重写操作)
  •   在运行时父类或者接口的引用变量可以引用其子类的 对象
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. TZOJ 3522 Checker Challenge(深搜)

    描述 Examine the 6x6 checkerboard below and note that the six checkers are arranged on the board so th ...

  2. Leetcode492.Construct the Rectangle构造矩形

    作为一位web开发者, 懂得怎样去规划一个页面的尺寸是很重要的. 现给定一个具体的矩形页面面积,你的任务是设计一个长度为 L 和宽度为 W 且满足以下要求的矩形的页面.要求: 1. 你设计的矩形页面必 ...

  3. 【笔记】LR响应时间

    事务:是指在客户端做一种或多种的业务所需要的操作集. 事务响应时间:是通过记录用户请求的开始时间和服务器返回内容到客户时间的差值来计算用户响应时间. 响应时间是服务器返回和用户请求之间的时间差,那么得 ...

  4. WPF 实现简单的跑马灯

    本文用WPF的动画实现一个简单的跑马灯 xmal: <Window x:Class="wpfstatusBar.MainWindow" xmlns="http:// ...

  5. 元素 XXXX 的前缀 "mvc" 未绑定

    这个问题是由于spring-servlet配置不全 在上边部分添加一句 xmlns:mvc="http://www.springframework.org/schema/mvc" ...

  6. DTD约束与schema约束的不同

    本篇笔记了解------Schema约束的语法 ------可以参考W3school之Schema教程. Schema:是基于 XML 的 DTD 替代者,用于描述XML文档结构.支持XML 命名空间 ...

  7. 直白介绍卷积神经网络(CNN)【转】

    英文地址:https://ujjwalkarn.me/2016/08/11/intuitive-explanation-convnets/ 中文译文:http://mp.weixin.qq.com/s ...

  8. jquery源码学习(三)—— jquery.prototype主要属性和方法

    上次我们学习了jquery中的主要对象jQuery和一些变量,现在我们开始学习jquery的原型 98行声明了jQuery.fn = jQuery.prototype = {} 285行jQuery. ...

  9. ylbtech-自信:自信

    ylbtech-自信:自信 自信心(confidence),在心理学中,与其最接近的是班杜拉(A.Bandura)在社会学习理论中提出的自我效能感 (self-efficacy)的概念,是指个体对自身 ...

  10. Mybatis使用 爬坑记录

    1.mapper.xml可以直接 使用map集合, parameterType="java.util.Map" resultType="java.util.Map&quo ...