多态(动手动脑)
Posted 丹丹阳光
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了多态(动手动脑)相关的知识,希望对你有一定的参考价值。
1、可以使用instanceof运算符判断一个对象是否可以转换为指定的类型:
Object obj="Hello";
if(obj instanceof String)
System.out.println("obj对象可以被转换为字符串");
程序代码:
package demo;
public class TestInstanceof {
public static void main(String[] args){
Object hello="Hello";
System.out.println("字符串是否是Object类的实例:"+(hello instanceof Object));
System.out.println("字符串是否是String类的实例:"+(hello instanceof String));
System.out.println("字符串是否是Math类的实例:"+(hello instanceof Math));
System.out.println("字符串是否是Comparable的实例:"+(hello instanceof Comparable));
//String a="Hello";
//System.out.println("字符串是否是Math类的实例:"+(a instanceof Math));
}
}
程序截图:
2、运行以下测试代码:,
1)左边的程序运行结果是什么?
2)你如何解释会得到这样的输出?
当子类与父类拥有一样的方法,并且让一个父类变量引用一个子类对象时,到底调用哪个方法,由对象自己的“真实”类型所决定,这就是说:对象是子类型的,它就调用子类型的方法,是父类型的,它就调用父类型的方法。
3) 计算机是不会出错的,之所以得到这样的运行结果也是有原因的,那么从这些运行结果中,你能总 结出Java的哪些语法特性?
如果子类与父类有相同的字段,则子类中的字段会代替或隐藏父类的字段,子类方法中访问的是子类中的字段(而不是父类中的字段)。如果子类方法确实想访问父类中被隐藏的同名字段,可以用super关键字来访问它。
如果子类被当作父类使用,则通过子类访问的字段是父类的!
3、用多态的方法模拟ATM操作流程。
程序代码:
package demo;
import java.util.Date;
import java.util.Scanner;
public class ATMduotai {
static Account user[] = new Account[10];
static int dq = -1;
static int n = 0;
static Scanner scan = new Scanner(System.in);
static char ch = \'y\';
static atmfun p;
public static void main(String[] args) {
// TODO Auto-generated method stub
user[n++] = new Account("1001","liming","123456",20000.0);
user[n++] = new Account("1002","liSi","456",10000.0);
int b;
String id,passwd;
boolean signin = false;
System.out.println("请输入账户名:");
id = scan.next();
//登录操作
for(int i = 0;i < n;i++){
p = user[i];
if(p.getId().equals(id))
{
System.out.println("请输入密码:");
passwd = scan.next();
if(p.getPasswd().equals(passwd))
{
signin = true;
dq = i;
break;
}
else
{
System.out.println("密码输入错误!卡已被锁定,无法操作");
System.exit(0);
}
break;
}
}
if(!signin)
{
System.out.println("无此用户名!");
System.exit(0);
}
//public ATMuser(String aid,String aname,String apasswd,double ayue){
while(ch == \'y\'){
System.out.println("***********************ATM*************************");
System.out.println("\\t\\t1、存款");
System.out.println("\\t\\t2、取款");
System.out.println("\\t\\t3、转账汇款");
System.out.println("\\t\\t4、修改密码");
System.out.println("\\t\\t5、查询余额");
System.out.println("\\t\\t6、退出");
System.out.println("***************************************************");
b = scan.nextInt();
switch(b){
case 1:
{
cunKuan();break;
}
case 2:
{
quKuan();break;
}
case 3:
{
zhuanZhang();break;
}
case 4:
{
xiuGaipw();break;
}
case 5:
{
chaXunyue();break;
}
case 6:
{
ch = \'n\';
break;
}
default:
System.out.println("输入错误!");break;
}
}
}
static void cunKuan(){
p = user[dq];
double jine;
System.out.println("请输入存款金额:");
jine = scan.nextDouble();
p.setYue(jine);
p.setType("存款");
p.setDate();
System.out.println("时间: " + p.getDate() + "\\t操作:" + p.getType());
System.out.println("余额为: " + p.getYue());
}
static void quKuan(){
p = user[dq];
System.out.println("请选择取款金额:");
System.out.println("1.100");
System.out.println("2.500");
System.out.println("3.1000");
System.out.println("4.1500");
System.out.println("5.2000");
System.out.println("6.5000");
System.out.println("7、其他金额");
System.out.println("8、退卡");
int b;
b = scan.nextInt();
double jine = 0;
switch(b)
{
case 1:
jine = 100;break;
case 2:
jine = 500;break;
case 3:
jine = 1000;break;
case 4:
jine = 1500;break;
case 5:
jine = 2000;break;
case 6:
jine = 5000;break;
case 7:
{
System.out.println("请输入金额:");
jine = scan.nextDouble();
break;
}
case 8:
ch = \'n\';break;
}
if(b != 8)
{
if(p.getYue() < jine)
System.out.println("余额不足!");
else{
p.setYue(-jine);
p.setType("取款");
p.setDate();
System.out.println("时间: " + p.getDate() + "\\t操作:" + p.getType());
System.out.println("余额为: " + p.getYue());
}
}
}
static void zhuanZhang(){
String duifang;
int df = -1;
System.out.println("请输入对方账户:");
duifang = scan.next();
boolean cunzai = false;
for(int i = 0;i < n;i++){
p = user[i];
if(p.getId().equals(duifang))
{
df = i;
cunzai = true;
break;
}
}
if(!cunzai)
{
System.out.println("无此用户名!");
}
else
{
p = user[dq];
double jine;
System.out.println("请输入转账金额:");
jine = scan.nextDouble();
if(p.getYue() >= jine)
{
p.setYue(-jine);
p.setType("转出");
p.setDate();
System.out.println("时间: " + p.getDate() + "\\t操作:" + p.getType());
System.out.println("余额为: " + p.getYue());
p = user[df];
p.setYue(jine);
p.setType("转入");
p.setDate();
System.out.println("转账成功");
}
else
System.out.println("余额不足");
}
}
static void xiuGaipw(){
p = user[dq];
String a;
System.out.println("请输入新密码:");
a = scan.next();
p.setPasswd(a);
p.setType("修改密码");
p.setDate();
System.out.println("时间: " + p.getDate() + "\\t操作:" + p.getType());
}
static void chaXunyue(){
p = user[dq];
System.out.println("余额为: " + p.getYue());
p.setType("查询余额");
p.setDate();
System.out.println("时间: " + p.getDate() + "\\t操作:" + p.getType());
}
}
interface atmfun {
void setId(String id);
void setName(String name);
void setPasswd(String passwd);
void setYue(double yue);
void setDate();
void setType(String type);
String getId();
String getName();
String getPasswd();
double getYue();
Date getDate();
String getType();
}
class Account implements atmfun{
String id;
String name;
String passwd;
double yue = 0;
Date date;
String type;
public Account(String aid,String aname,String apasswd,double ayue){
name = aname;
id = aid;
passwd = apasswd;
yue = ayue;
setDate();
setType("添加用户");
}
public void setId(String id){
this.id = id;
}
public void setYue(double yue){
this.yue += yue;
}
public void setName(String name){
this.name = name;
}
public void setPasswd(String passwd){
this.passwd = passwd;
}
public void setType(String type){
this.type = type;
}
public void setDate(){
date = new Date();
}
public String getId(){
return id;
}
public String getName(){
return name;
}
public String getPasswd(){
return passwd;
}
public double getYue(){
return yue;
}
public String getType() {
return type;
}
public Date getDate(){
return date;
}
}
程序截图:
以上是关于多态(动手动脑)的主要内容,如果未能解决你的问题,请参考以下文章