一.动手动脑

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. Android 布局详解

    Android 布局详解 1.重用布局 当一个布局文件被多处使用时,最好<include>标签来重用布局. 例如:workspace_screen.xml的布局文件,在另一个布局文件中被重 ...

  2. 使用LR11录制手机脚本

    要使用Loadrunner11录制手机脚本,需要先搭建好测试环境:  能够正常使用的LoadRunner11:  安装一个LR11的补丁包,用于手机录制:  pc端和手机端的网络在同一个网段.  ...

  3. PHP关于foreach使用引用变量的坑

    写PHP好多年,但仍然会犯低级错误,今天遇到个 foreach中引用变量时的坑,PHP版本为 5.6.12 代码如下: <?php $arr = ['a', 'b', 'c', 'd', 'e' ...

  4. Docker集群实验环境布署--swarm【7 让docker客户端支持docker-compose】

    Docker-Compose是一个部署多个容器的简单但是非常必要的工具.   登录Docker客户端的服务器(默认是安装了docker-engine的服务器),再安装compose插件 # yum i ...

  5. 关于jquery 1.9以上多次点击checkbox无法选择的

    在jquery1.9之前,我们对于一个checkbox对象来进行重复选择或者取消, 我们可以使用这个方法$().attr('checked',checked);//选中 $().removeAttr( ...

  6. MATLAB中的微积分运算(数值&符号)

    显然这个函数是单词differential(微分)的简写,用于计算微分.实际上准确来说计算的是差商. 如果输入一个长度为n的一维向量,则该函数将会返回长度为n-1的向量,向量的值是原向量相邻元素的差, ...

  7. MVC-Area

    ASP.NET MVC中,是依靠某些文件夹以及类的固定命名规则去组织model实体层,views视图层和控制层的.如果是大规模的应用程序,经常会由不同功能的模块组成,而每个功能模块都由MVC中的三层所 ...

  8. 【安装】python3.4版安装与2.x共存问题

    首先,到官网去下载python3.x版,这里推荐3.4以上的版本,自带pip库,以后不用自己另外下载 3.4.4版: https://www.python.org/downloads/release/ ...

  9. Labeling Balls(变种拓扑)

    Labeling Balls Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 131072/65536K (Java/Other) Tot ...

  10. request获取ip

    public static String getIp(HttpServletRequest request) { String ip = request.getHeader("x-forwa ...