java中多态的使用
一.动手动脑
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中多态的使用的更多相关文章
- 关于java中多态的理解
java三大特性:封装,继承,多态. 多态是java的非常重要的一个特性: 那么问题来了:什么是多态呢? 定义:指允许不同类的对象对同一消息做出响应.即同一消息可以根据发送对象的不同而采用多种不同的行 ...
- 深入Java核心 Java中多态的实现机制(1)
在疯狂java中,多态是这样解释的: 多态:相同类型的变量,调用同一个方法时,呈现出多中不同的行为特征, 这就是多态. 加上下面的解释:(多态四小类:强制的,重载的,参数的和包含的) 同时, 还用人这 ...
- 个人对Java中多态的一些简单理解
什么是多态 面向对象的三大特性:封装.继承.多态.从一定角度来看,封装和继承几乎都是为多态而准备的.这是我们最后一个概念,也是最重要的知识点. 多态的定义:指允许不同类的对象对同一消息做出响应.即同一 ...
- Java中多态的一些简单理解
什么是多态 .面向对象的三大特性:封装.继承.多态.从一定角度来看,封装和继承几乎都是为多态而准备的.这是我们最后一个概念,也是最重要的知识点. .多态的定义:指允许不同类的对象对同一消息做出响应.即 ...
- 从虚拟机指令执行的角度分析JAVA中多态的实现原理
从虚拟机指令执行的角度分析JAVA中多态的实现原理 前几天突然被一个"家伙"问了几个问题,其中一个是:JAVA中的多态的实现原理是什么? 我一想,这肯定不是从语法的角度来阐释多态吧 ...
- Java 中多态的实现(下)
Java 中多态的另一个语法实现是重写.重载是通过静态分派实现的,重写则是通过动态分派实现的. 在学习动态分派之前,需要对虚拟机的知识有一个初步的了解. 虚拟机运行时数据区 运行 Java 程序时,虚 ...
- Java 中多态的实现(上)
Java 中语法上实现多态的方式分为两种:1. 重载.2. 重写,重载又称之为编译时的多态,重写则是运行时的多态. 那么底层究竟时如何实现多态的呢,通过阅读『深入理解 Java 虚拟机』这本书(后文所 ...
- Java中多态、抽象类和接口
1:final关键字(掌握) (1)是最终的意思,可以修饰类,方法,变量. (2)特点: A:它修饰的类,不能被继承. B:它修饰的方法,不能被重写. C:它修饰的变量,是一个常量. (3)面试相关: ...
- Java中多态的理解
最近学习Java里面的多态下面是个人的整理: 多态存在的3个必要条件: 1.要有继承 2.要有方法的重写 3.父类引用指向子类对象(对于父类中定义的方法,如果子类中重写了该方法,那么父类类型的引用将会 ...
- 对Java中多态,封装,继承的认识(重要)
一.Java面向对象编程有三大特性:封装,继承,多态 在了解多态之前我觉得应该先了解一下 ...
随机推荐
- Quagga添加自己的命令
参考了王斌的文档:http://down.51cto.com/data/621454 TIP:笔者使用的版本是0.99.20 需求:在接口模式下添加一条"ip ospf enable&quo ...
- Android消息推送之各种方案的对比
C2DM/GCM: 优点:免费,搭建方便 缺点:依赖谷歌服务器:免费服务有上限:依赖谷歌服务包:需要2.2+版本的安卓系统才支持:对网络状况有一定要求,接收不可靠.(也是基于XMPP协议) XMPP( ...
- Mysql 免安装版 root@localhost第一次密码设置
方法1: 用SET PASSWORD命令 mysql -u root mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('newpass ...
- js操作
1.1.直接传入Javascript代码,定位元素 js可以点击页面上不显示暂时隐藏(比如下拉列表),但是html文件中存在的属性 WebDriver driver = new FirefoxDriv ...
- 你真的懂javascript中的 “this” 吗?
一.前言: 我们知道 "this" 是javascript语言的一个关键字,在编写javascript代码的时候,经常会见到或者用到它. 但是,有一部分开发朋友,对 "t ...
- JavaScript编写连连看
这几天写题比较少,做了一下网页设计的期末大作业.搞了个连连看,核心代码和hdu 1175那个题目一样. 越来越觉得学ACM是十分有用的,软件的核心是数据结构和算法,学会了DFS,连连看就水到渠成了. ...
- 实际开发中,后台回传的错误格式的Json数据处理
现在很多学习刚学习移动开发的同学,相信在培训机构,拿到后台数据的时候,格式都是正确的,甚至有的还是plist文件.但是实际开发中,我们获取数据都是通过网络接口从服务器获取数据,这些数据的格式都是后台写 ...
- C# ObjectHelper
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- netty中级篇(2)
上一篇 netty入门篇(1) 一.编码解码技术 如何评价一个编解码技术: 是否支持跨语言,或者说支持的语言是否丰富 编码码流大小,影响传输速度 编码和解码的性能,即时间 类库是否精致,API是否方便 ...
- FZU 2086 餐厅点餐(模拟)
Problem 2086 餐厅点餐 Problem Description Jack最近喜欢到学校餐厅吃饭,好吃干净还便宜. 在学校餐厅,有a种汤,b种饭,c种面条,d种荤菜,e种素菜. 为了保证膳食 ...