JAVA多态

1.ATM

import java.util.Scanner;

interface fangfa{

 

public void show();

public void qukuan();

public void cunkuan();

public void zhuanzhang();

public void setAcount(String string, String string2, String string3, String string4, double i);

public String getMima();

}

class atm implements fangfa{

String kahao; //私有变量

String name;

String riqi;

double yue;

String mima;

 

public atm(){ //无参构造函数

 

}

public atm(String kahao,String name,String riqi,String mima,double yue){ //有参构造函数

 

this.kahao=kahao;

this.name=name;

this.riqi=riqi;

this.mima=mima;

this.yue=yue;

}

 

public void setAcount(String kahao,String name,String riqi,String mima,double yue){ //赋值

 

this.kahao=kahao;

this.name=name;

this.riqi=riqi;

this.mima=mima;

this.yue=yue;

}

 public String getkahao(){ return kahao;}//获得值

 

 public String getName(){return name;}

 public String getRiqi(){return riqi;}

 public String getMima(){return mima;}

 public double getYue(){return yue;}

 

public void show()

{

System.out.println("余额为:"+yue);

}

public void cunkuan(){

System.out.println("请输入存款金额:");

Scanner s=new Scanner(System.in);

yue+=s.nextDouble();

show();

}

 

public void zhuanzhang()

{

atm q=new atm();

Scanner s=new Scanner(System.in);

System.out.println("请输入对方卡号:");

q.kahao=s.nextLine();

System.out.println("请输入转账金额:");

double zhuan=s.nextDouble();

yue=yue-zhuan;

q.yue=q.yue+zhuan;

show();

}

public void qukuan(){

boolean f=true;

while(f){

System.out.println("1100");

System.out.println("2500");

System.out.println("31000");

System.out.println("41500");

System.out.println("52000");

System.out.println("65000");

System.out.println("7、其他金额");

System.out.println("8、退卡");

System.out.println("9、返回");

System.out.println("请选择");

Scanner s=new Scanner(System.in);

int ch=s.nextInt();

switch(ch){

case 1:

if(yue<100)

System.out.print("余额不足");

yue=yue-100;

show();

break;

case 2:

if(yue<500)

System.out.print("余额不足");

else

 

yue=yue-500;

show();

break;

case 3:

if(yue<1000)

System.out.print("余额不足");

else

yue=yue-1000;

show();

break;

case 4:

if(yue<1500)

System.out.print("余额不足");

yue=yue-1500;

show();

break;

case 5:

if(yue<2000)

System.out.print("余额不足");

else

yue=yue-2000;

show();

break;

case 6:

if(yue<5000)

System.out.print("余额不足");

else

yue=yue-5000;

show();

break;

case 7:

System.out.println("请输入取款金额:");

double qu=s.nextDouble();

if(yue<qu)

System.out.print("余额不足");

else

yue=yue-qu;

show();

break;

case 8:

f=false;

break;

case 9:

f=false;

break;

 

}

}

}

 

}

public class zhuanhua {

 

public static void main(String[] args) {

 

fangfa a=new atm();

a.setAcount("165432156432165", "zhangzemin", "2016.11.18", "123456", 100000);

System.out.println("请输入密码:");

Scanner aa=new Scanner(System.in);

String ba=aa.nextLine();

if(ba.equals(a.getMima()))

 

while(true){

 

System.out.println("1、取款");

System.out.println("2、存款");

System.out.println("3、转账");

System.out.println("4、查询");

System.out.println("请选择:");

Scanner s=new Scanner(System.in);

int b=s.nextInt();

switch(b){

case 1:

a.qukuan();

break;

case 2:

a.cunkuan();

break;

case 3:

a.zhuanzhang();

break;

case 4:

a.show();

}

}

}

}

 

 

二:

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);

    }

}

2、实验截图:

 

3、结果分析:

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

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

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

【作业】思索:这种编程方式有什么不合理的地方吗?

 

 

 

从这个示例中可以看到,通过在编程中应用多态,可以使我们的代码具有更强的适用性。当需求变化时,多态特性可以帮助我们将需要改动的地方减少到最低限度。
多态编程有两种主要形式:
1)继承多态:示例程序使用的方法
2)接口多态:使用接口代替抽象基类

posted @ 2016-11-18 21:57  贼帅的火柴人  阅读(168)  评论(0编辑  收藏  举报