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面向对象编程有三大特性:封装,继承,多态 在了解多态之前我觉得应该先了解一下 ...
随机推荐
- hdu 1559 最大子矩阵(DP)
题目链接:点击链接 #include<stdio.h> #include<string.h> #define max(a,b) a>b?a:b int d[1005][1 ...
- eclipse调试java调用matlab程序的7.17dll找不到的问题
经过多次查找,这个问题本来很简单,在环境变量中CLASSPATH配置C:\MATLAB\R2012a\toolbox\javabuilder\jar\win64\javabuilder.jar 特别注 ...
- android.view.WindowManager$BadTokenException: Unable to add window — token null is not for an applic
之前遇到过这样的问题, 04-12 10:40:33.302: E/AndroidRuntime(17213): Caused by: android.view.WindowManager$BadTo ...
- [ios2]蓝牙通信【转】
iPhone开发应用中关于GameKit蓝牙实例讲解是本文要介绍的内容,主要是来了解并学习GameKit蓝牙实例.介绍一下这个实例实现的是两个带有蓝牙设备的touch之间的一个小游戏,在界面上有个可以 ...
- 将WebApi Host到控制台和IIS
近期学习WebApi,初步感想是用起来很容易上手,概念上也很好理解,唯一不爽的地方就在于如果在Visual Studio环境里建立Webapi程序,它会自动给创建很多文件夹和文件,其中很多都是用不到的 ...
- python之路 - 基础3
1.字符串处理 name = "my name is jiachen" #首字母大写 print (name.capitalize()) #统计字母出现次数 print (name ...
- 运行Google 官方zxing二维码扫描器
首先,要去下载Zxing的源码,由于Zxing 的服务内容比较广,我们先把所有的源码都下载下来,使用的时候根据需要加载. 或者从开源中国下载https://www.oschina.net/questi ...
- AsyncTask兼容性
简介 AsyncTask是Android系统提供的异步方式,其优点在于在子线程执行任务,并将结果传递给主线程. 实现方式 AsyncTask封装了Executor和Handler. 基本使用 通过As ...
- 将int,bigint整型数值可逆转换字符串
将 Int 和 BigInt 类型数值转换为字符串的可逆方法,可用于缩短网址或记录的ID转换等. 如: 9223372036854775807 => aZl8N0y58M7 class Conv ...
- 安装windows后grub的恢复
问题: 原本是:双系统(linux和windows),后来换windows版本覆盖了grub2 解决方法: 进入windows后下载并安装EasyBCD并添加grub2的选项,重启看见了熟悉的启动项, ...