Java面向对象----多态概念,对象上下转型
概念:同一操作作用于某一类对象,可以有不同的解释,产生不同的执行结果
多态存在的三个必要条件
- 需要存在继承和实现关系
- 同样的 方法调用而执行不同操作,运行不同的代码(重写操作)
- 在运行时父类或者接口的引用变量可以引用其子类的 对象
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面向对象----多态概念,对象上下转型的更多相关文章
- Java面向对象多态
Java面向对象多态 7.2对象 7.2.1创建对象 对象是类的实例 类的名称 对象名称 = new 类的名称(); 7.3继承 继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域 ...
- Java面向对象-类与对象
Java面向对象-类与对象 类与对象的关系 我们通俗的举个例子,比如人类是一种类,张三这个人就是人类的具体的一个个体,也就是java中的对象:这就是一个类与对象的关系: 类的定义 下面看实例 类的创建 ...
- Java面向对象--类和对象
面向对象是相对于面向过程而言的,是软件开发方法.面向对象把相关的数据和方法组织为一个整体来看待,从更高的层次来进行系统设计,更贴近事物的自然运行模式.本篇博客介绍Java面向对象的类和对象 目录: 面 ...
- -1-2 java 面向对象基本概念 封装继承多态 变量 this super static 静态变量 匿名对象 值传递 初始化过程 代码块 final关键字 抽象类 接口 区别 多态 包 访问权限 内部类 匿名内部类 == 与 equal
java是纯粹的面向对象的语言 也就是万事万物皆是对象 程序是对象的集合,他们通过发送消息来相互通信 每个对象都有自己的由其他的对象所构建的存储,也就是对象可以包含对象 每个对象都有它的类型 也就是 ...
- java面向对象1-面向对象概念
面向对象概念-类与对象的关系 封装:指隐藏对象的属性和实现细节,仅对外提供公共访问方式,private-构造方法/构造器-this关键字-static关键字(javadoc制作工具类) -代码块 继承 ...
- JAVA面向对象-多态的理解
面向对象编程有三个特征,即封装.继承和多态. 封装隐藏了类的内部实现机制,从而可以在不影响使用者的前提下改变类的内部结构,同时保护了数据. 继承是为了重用父类代码,同时为实现多态性作准备.那么什么是多 ...
- Java面向对象的概念整理
Java中一切皆是对象! 注意:8种基本数据类型不支持面向对象的编程机制,基本数据类型的数据也不具备“对象”的特性:没有成员变量.方法可以被调用. 为解决8种基本数据类型不能当成Object类型(所有 ...
- Java面向对象——类,对象和方法
1.类的概念 在生活中,说到类,可以联想到类别,同类,会想到一类人,一类事物等等.而这一类人或事物都是具有相同特征或特点和行为的,我们根据不同的特征或特点和行为将他们归类或分类.同时,当我们认识一个新 ...
- Java面向对象-------多态总结
1.多态:是同一个行为具有多个不同表现形式或形态的能力. 多态就是同一个接口,使用不同的实例而执行不同操作,如图所示: 多态性是对象多种表现形式的体现. 2.多态作用: 1. 消除类型之间的耦合关系 ...
随机推荐
- python在WIN下CMD运行中文乱码及python 2.x python 3.x编码问题
在CMD中运行python代码时,我们会发现,即使在代码中加入# -*- coding:utf-8 -*- 这段代码,中文仍然会乱码.如下: # -*- coding:utf-8 -*- conten ...
- T2485 汉诺塔升级版(普及)(递归)
https://www.luogu.org/problem/show?pid=T2485 题目背景 汉诺塔升级了 题目描述 现在我们有N个圆盘和N个柱子,每个圆盘大小都不一样,大的圆盘不能放在小的圆盘 ...
- 用JetBrains PyCharm 2017.2创建运行Django程序
在JetBrains PyCharm 2017.2里选择 文件(F) 新项目 点击 三角形 运行 修改Urls.py """S14Djngo URL Configur ...
- TZ_11_Spring-Boot的整合SpringMvc和MyBatis
1.整合SpringMVC 虽然默认配置已经可以使用SpringMVC了,不过我们有时候需要进行自定义配置. 1>修改方式 通过application.yaml 此名字不需要使用@Propert ...
- H5C3--过渡transition
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 前端(Node.js)(3)-- Node.js实战项目开发:“技术问答”
1.Web 与 Node.js 相关技术介绍 1.1.Web应用的基本组件 web应用的三大部分 brower(GUI)<==>webserver(business logic.data ...
- 解决底部Button遮挡ListView最后一项内容的bug
项目中ListView和Button经常是一起使用的,用ListView来展示数据,用Button来提交修改的数据或对修改的数据进行确定操作. 假如使用线性布局的话ListView会盖住整个Butto ...
- div覆盖div DIV相互重叠如何解决
div覆盖div,出现div与div盒子之间产生重叠覆盖现象,而内容没有出现覆盖重叠现象原因与解决方法.DIVCSS5通过CSS图文案例介绍产生原因与解决方法.DIV与DIV覆盖原因与解决方法. 可能 ...
- 【JZOJ4161】于神之怒 莫比乌斯反演
任务 答案mod 1e9+7. 解法 容易写出反演: Ans=∑T=1nTk∗∑i=1⌊nT⌋⌊niT⌋⌊miT⌋μ(i) ∑⌊nT⌋i=1⌊niT⌋⌊miT⌋μ(i)这个因式显然是经典的分块处理: ...
- SVN经常使用操作
版权声明:本文为博主原创文章.转载请注明出处. https://blog.csdn.net/Jerome_s/article/details/27950055 Subversion(简称svn)安装 ...