一.动手动脑

public class ParentChildTest {
public static void main(String[] args) {
Parent parent=new Parent();
parent.printValue();
Child child=new Child();
child.printValue(); parent=child;
parent.printValue(); parent.myValue++;
parent.printValue(); ((Child)parent).myValue++;
parent.printValue(); }
} class Parent{
public int myValue=100;
public void printValue() {
System.out.println("Parent.printValue(),myValue="+myValue);
}
}
class Child extends Parent{
public int myValue=200;
public void printValue() {
System.out.println("Child.printValue(),myValue="+myValue);
}
}

截图结果

结论:

当子类与父类拥有一样的方法,并且让一个父类变量引用一个子类对象时,到底调用哪个方法,由对象自己的“真实”类型所决定。

这就是说:对象是子类型的,它就调用子类型的方法,是父类型的,它就调用父类型的方法。

如果子类与父类有相同的字段,则子类中的字段会代替或隐藏父类的字段,子类方法中访问的是子类中的字段(而不是父类中的字段)。如果子类方法确实想访问父类中被隐藏的同名字段,可以用super关键字来访问它。
如果子类被当作父类使用,则通过子类访问的字段是父类的!

二:动手动脑

动物园

public class Zoo
{ public static void main(String args[])
{ Feeder f = new Feeder("小李"); //饲养员小李喂养一只狮子 f.feedAnimal(new Lion());
//饲养员小李喂养十只猴子 for (int i = 0; i < 10; i++)
{ f.feedAnimal(new Monkey()); } //饲养员小李喂养5只鸽子 for (int i = 0; i < 5; i++)
{ f.feedAnimal(new Pigeon()); } } } class Feeder
{ public String name; Feeder(String name)
{ this.name = name; } public void feedAnimal(Animal an)
{ an.eat(); } } abstract class Animal
{ public abstract void eat(); } class Lion extends Animal
{ public void eat()
{ System.out.println("我不吃肉谁敢吃肉!"); } } class Monkey extends Animal
{ public void eat()
{ System.out.println("我什么都吃,尤其喜欢香蕉。"); } } class Pigeon extends Animal
{ public void eat()
{ System.out.println("我要减肥,所以每天只吃一点大米。"); } }

  

ATM机的实现:

import java.util.Scanner;

public class ATM {
private static String name;
private static String Data;
private static String mima;
static double money;
static ATM code=new ATM("岳志浩","11.13","123456",1000);
static Scanner str=new Scanner(System.in); public ATM(String name1,String Data1,String mima1,double money1)
{
name=name1;
Data=Data1;
mima=mima1;
money=money1;
}
/*public static void qu()
{
System.out.println("选择存取金额"+"\n"+"1、100元"+"\n"+"2、500"+"\n"+"3、1000"+"\n"+"4、1500"+"\n"+"5、2000"+"\n"+"6、5000"+"\n"+"7、其他金额");
int caozuo=str.nextInt(); if(caozuo==1)
{
if(money<100)
{
System.out.println("余额不足");
qu();
}
money=money-100;
System.out.println("余额"+money);
}
if(caozuo==2)
{ if(money<500)
{
System.out.println("余额不足");
qu();
}
money=money-500;
System.out.println("余额"+money);
}
if(caozuo==3)
{ if(money<1000)
{
System.out.println("余额不足");
qu();
}
money=money-1000;
System.out.println("余额"+money);
}
if(caozuo==4)
{ if(money<1500)
{
System.out.println("余额不足");
qu();
}
money=money-1500;
System.out.println("余额"+money);
}
if(caozuo==5)
{ if(money<2000)
{
System.out.println("余额不足");
qu();
}
money=money-2000;
System.out.println("余额"+money);
}
if(caozuo==6)
{
if(money<5000)
{
System.out.println("余额不足");
qu();
}
money=money-5000;
System.out.println("余额"+money);
}
if(caozuo==7)
{
double money1=str.nextDouble();
money=money-money1;
System.out.println("余额"+money);
} }
*/
public static void qu()
{
System.out.println("选择存取金额"+"\n"+"1、100元"+"\n"+"2、500"+"\n"+"3、1000"+"\n"+"4、1500"+"\n"+"5、2000"+"\n"+"6、5000"+"\n"+"7、其他金额");
int caozuo=str.nextInt();
Qu a=new Qu();
if(caozuo==1)
{
Qu100 b=new Qu100();
a=b;
b.qu(code);
System.out.println("余额"+money);
}
if(caozuo==2)
{
Qu500 b=new Qu500();
a=b;
b.qu(code);
System.out.println("余额"+money);
}
if(caozuo==3)
{
Qu1000 b=new Qu1000();
a=b;
a.qu(code);
System.out.println("余额"+money);
}
if(caozuo==4)
{
Qu1500 b=new Qu1500();
a=b;
a.qu(code);
System.out.println("余额"+money);
}
if(caozuo==5)
{
Qu2000 b=new Qu2000();
a=b;
a.qu(code);
System.out.println("余额"+money);
}
if(caozuo==6)
{
Qu5000 b=new Qu5000();
a=b;
a.qu(code);
System.out.println("余额"+money);
} }
public static void zhuan()
{
System.out.println("输入要转入的卡号");
String ka=str.next();
System.out.println("输入要转入金额");
double money1=str.nextDouble();
money=money-money1;
System.out.println("转账成功"); }
public static void cun()
{ System.out.println("输入存取金额");
double money1=str.nextDouble();
money=money+money1;
System.out.println("余额"+money);
}
public static void xugai()
{
System.out.println("输入要修改的密码");
String mima1=str.next();
mima=mima1; }
public static void main(String args[])
{ System.out.println("输入密码");
String mima1=str.next();
if(mima1.equals(ATM.mima))
{
int x=0;
while (x!=5)
{ if(x==1)
{
qu(); }
if(x==2)
{
cun();
}
if(x==3)
{
zhuan();
}
if(x==4)
{
xugai();
}
if(x==5)
{
System.out.println("用户名:"+name+"日期:"+Data+"余额:"+money);
break;
}
System.out.println("选择操作");
System.out.print("1.取款"+"\n"+"2.存款"+"\n"+"3.转账"+"\n"+"4.修改密码"+"\n"+"5.退卡");
int w=str.nextInt();
x=w; }
}
else
{
System.out.println("密码错误");
} } }
class Qu
{ public void qu(ATM a)
{
}
}
class Qu100 extends Qu
{ public void qu(ATM a)
{
a.money=a.money-100;
}
}
class Qu500 extends Qu
{ public void qu(ATM a)
{
a.money=a.money-500;
}
}
class Qu1000 extends Qu
{ public void qu(ATM a)
{
a.money=a.money-1000;
}
}
class Qu1500 extends Qu
{ public void qu(ATM a)
{
a.money=a.money-1500;
}
}
class Qu2000 extends Qu
{ public void qu(ATM a)
{
a.money=a.money-2000;
}
}
class Qu5000 extends Qu
{ public void qu(ATM a)
{
a.money=a.money-5000;
}
}

  结果截图

java中多态的使用的更多相关文章

  1. 关于java中多态的理解

    java三大特性:封装,继承,多态. 多态是java的非常重要的一个特性: 那么问题来了:什么是多态呢? 定义:指允许不同类的对象对同一消息做出响应.即同一消息可以根据发送对象的不同而采用多种不同的行 ...

  2. 深入Java核心 Java中多态的实现机制(1)

    在疯狂java中,多态是这样解释的: 多态:相同类型的变量,调用同一个方法时,呈现出多中不同的行为特征, 这就是多态. 加上下面的解释:(多态四小类:强制的,重载的,参数的和包含的) 同时, 还用人这 ...

  3. 个人对Java中多态的一些简单理解

    什么是多态 面向对象的三大特性:封装.继承.多态.从一定角度来看,封装和继承几乎都是为多态而准备的.这是我们最后一个概念,也是最重要的知识点. 多态的定义:指允许不同类的对象对同一消息做出响应.即同一 ...

  4. Java中多态的一些简单理解

    什么是多态 .面向对象的三大特性:封装.继承.多态.从一定角度来看,封装和继承几乎都是为多态而准备的.这是我们最后一个概念,也是最重要的知识点. .多态的定义:指允许不同类的对象对同一消息做出响应.即 ...

  5. 从虚拟机指令执行的角度分析JAVA中多态的实现原理

    从虚拟机指令执行的角度分析JAVA中多态的实现原理 前几天突然被一个"家伙"问了几个问题,其中一个是:JAVA中的多态的实现原理是什么? 我一想,这肯定不是从语法的角度来阐释多态吧 ...

  6. Java 中多态的实现(下)

    Java 中多态的另一个语法实现是重写.重载是通过静态分派实现的,重写则是通过动态分派实现的. 在学习动态分派之前,需要对虚拟机的知识有一个初步的了解. 虚拟机运行时数据区 运行 Java 程序时,虚 ...

  7. Java 中多态的实现(上)

    Java 中语法上实现多态的方式分为两种:1. 重载.2. 重写,重载又称之为编译时的多态,重写则是运行时的多态. 那么底层究竟时如何实现多态的呢,通过阅读『深入理解 Java 虚拟机』这本书(后文所 ...

  8. Java中多态、抽象类和接口

    1:final关键字(掌握) (1)是最终的意思,可以修饰类,方法,变量. (2)特点: A:它修饰的类,不能被继承. B:它修饰的方法,不能被重写. C:它修饰的变量,是一个常量. (3)面试相关: ...

  9. Java中多态的理解

    最近学习Java里面的多态下面是个人的整理: 多态存在的3个必要条件: 1.要有继承 2.要有方法的重写 3.父类引用指向子类对象(对于父类中定义的方法,如果子类中重写了该方法,那么父类类型的引用将会 ...

  10. 对Java中多态,封装,继承的认识(重要)

                                                            一.Java面向对象编程有三大特性:封装,继承,多态 在了解多态之前我觉得应该先了解一下 ...

随机推荐

  1. listView 分页加载数据

    Android应用 开发中,采用ListView组件来展示数据是很常用的功能,当一个应用要展现很多的数据时,一般情况下都不会把所有的数据一次就展示出来,而是通过分页 的形式来展示数据,个人觉得这样会有 ...

  2. 如何一步一步用DDD设计一个电商网站(十一)—— 最后的准备

     阅读目录 前言 准备 实现 结语 一.前言 最近实在太忙,上周停更了一周.按流程一步一步走到现在,到达了整个下单流程的最后一公里——结算页的处理.从整个流程来看,这里需要用户填写的信息是最多的,那么 ...

  3. Oracle wm_concat(列转行函数)实际使用

    接触到了一个开发需求.其中是要把NC单据表体行的字段拼成一个字符串.例如: id name work age 1 王一 搬运工 20 2 李二 清洁工 21 3 张三 洗脚工 22 出现结果字符串为: ...

  4. 一键安装Redmine

    群英汇·项目管理系统:http://www.ossxp.com/HelpCenter/00040_Redmine 其中包含中文说明及管理手册 一键安装下载:http://bitnami.org/sta ...

  5. hdu1038

    #include <stdio.h> #define P 3.1415927 #define toFeet(x) x/12.0 #define toMiles(x) x/5280.0 in ...

  6. elasticsearch基本概念

    NRT(近实时搜索) Elasticsearch是一个NRT平台.这意味着当你索引一个文件时,在细微的延迟(通常1s)之后,该文件才能被搜索到. Cluster(集群) cluster是在所有节点中保 ...

  7. Linux CentOS7/RHEL7关闭ctrl+alt+delete功能键

            这是本人测试的经过,纯粹记录来看看,最终解决方法在最后面,中间讲的是遇到的一些坑,可以略过不看!!        本人操作经验,转载请表明出处:http://www.cnblogs.c ...

  8. github从上传代码到发布静态网站

    1.上传代码 第一步:建立git仓库 cd到你的本地项目根目录下,执行git命令 git init 第二步:将项目的所有文件添加到仓库中 git add . 如果想添加某个特定的文件,只需把.换成特定 ...

  9. C# 语言规范_版本5.0 (第19章 附录A_文档注释)

    A. 文档注释 C# 提供一种机制,使程序员可以使用含有 XML 文本的特殊注释语法为他们的代码编写文档.在源代码文件中,可以使用特定形式的注释来指导工具从这些注释及其后的源代码元素生成 XML.使用 ...

  10. 在2002年的老电脑上安装Debian

    在2002年自己花了家里八千多元买了一台联想昭笔记本电脑.配置是PIII 750 Hz, 128 MB内存(后来升级到了320 MB).那个时候大学里买笔记本电脑的人还不多,宿舍里的同学大都攒的台式机 ...