• 多态


    一、课堂动脑总结

    1、源代码

    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关键字来访问它。如果子类被当作父类使用,则通过子类访问的字段是父类的!

    二、多态Atm

    1、源代码

    package Guidang8;

     

    import java.util.Scanner;

    class Qukuan1 extends Manager{

    Qukuan1(String kahao,String name,String Date,int mima,double yue){

    super(kahao,name,Date,mima,yue);

    }

    void qukuan(){

    yue=yue-100;

    if(yue>=0){

    setyue(yue);

    }

    else

    System.out.println("余额不足!");

    }

    }

    class Qukuan2 extends Manager{

    Qukuan2(String kahao, String name, String Date, int mima, double yue) {

    super(kahao, name, Date, mima, yue);

    // TODO 自动生成的构造函数存根

    }

     

    void qukuan(){

    yue=yue-500;

    if(yue>=0){

    setyue(yue);

    }

    else

    System.out.println("余额不足!");

    }

    }

    class Qukuan3 extends Manager{

    Qukuan3(String kahao, String name, String Date, int mima, double yue) {

    super(kahao, name, Date, mima, yue);

    // TODO 自动生成的构造函数存根

    }

     

    void qukuan(){

    yue=yue-1000;

    if(yue>=0){

    setyue(yue);

    }

    else

    System.out.println("余额不足!");

    }

    }

    class Qukuan4 extends Manager{

    Qukuan4(String kahao, String name, String Date, int mima, double yue) {

    super(kahao, name, Date, mima, yue);

    // TODO 自动生成的构造函数存根

    }

     

    void qukuan(){

    yue=yue-1500;

    if(yue>=0){

    setyue(yue);

    }

    else

    System.out.println("余额不足!");

    }

    }

    class Qukuan5 extends Manager{

    Qukuan5(String kahao, String name, String Date, int mima, double yue) {

    super(kahao, name, Date, mima, yue);

    // TODO 自动生成的构造函数存根

    }

     

    void qukuan(){

    yue=yue-2000;

    if(yue>=0){

    setyue(yue);

    }

    else

    System.out.println("余额不足!");

    }

    }

    class Qukuan6 extends Manager{

    Qukuan6(String kahao, String name, String Date, int mima, double yue) {

    super(kahao, name, Date, mima, yue);

    // TODO 自动生成的构造函数存根

    }

     

    void qukuan(){

    yue=yue-5000;

    if(yue>=0){

    setyue(yue);

    }

    else

    System.out.println("余额不足!");

    }

    }

    class Qukuan7 extends Manager{

    Qukuan7(String kahao, String name, String Date, int mima, double yue) {

    super(kahao, name, Date, mima, yue);

    // TODO 自动生成的构造函数存根

    }

     

    void qukuan(){

    Scanner in =  new Scanner(System.in);

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

    int d=in.nextInt();

    yue=yue-d;

    if(yue>=0){

    setyue(yue);

    }

    else

    System.out.println("余额不足!");

    }

    }

     

    class Manager {

    private String kahao;

    private String name;

    private String Date;

    private int mima;

    protected double yue;

    Manager(String kahao,String name,String Date,int mima,double yue){

    this.kahao=kahao;

    this.name=name;

    this.Date=Date;

    this.mima=mima;

    this.yue=yue;

    }

    public void setkahao(String kahao){

    this.kahao=kahao;

    }

    public String getkahao(){

    return kahao;

    }

    public void setname(String name){

    this.name=name;

    }

     

    public String getname(){

    return name;

    }

    public void setDate(String Date){

    this.Date=Date;

    }

    public String getDate(){

    return Date;

    }

    public void setmima(int mima){

    this.mima=mima;

    }

    public int getmima(){

    return mima;

    }

    public void setyue(double yue){

    this.yue=yue;

    }

    public double getyue(){

    return yue;

    }

     

     

    void jiemian(){

    System.out.println("******************************************************");

    System.out.println("  ATM       ");

    System.out.println("******************************************************");

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

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

    System.out.println(" 3、汇款");

    System.out.println(" 4、修改密码");

    System.out.println(" 5、查询余额");

    System.out.println(" 6、退出程序");

    System.out.println("******************************************************");

    }

    void cunkuan(){

    Scanner in =  new Scanner(System.in);//定义一个Scanner对象

    Scanner in1 =  new Scanner(System.in);

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

    double yu1 = in.nextInt();

    yue=yue+yu1;

    setyue(yue);

     

    }

    void qukuan(){}

     

    void mima(){

    Scanner in =  new Scanner(System.in);

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

    int mi=in.nextInt();

    setmima(mi);

    System.out.println("修改成功!");

    }

    void zhuanzhang(){

    System.out.println("请输入转账帐号:");

    Scanner in =  new Scanner(System.in);

    String b=in.next();

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

    int c=in.nextInt();

    yue=yue-c;

    if(yue>=0){

    setyue(yue);

    System.out.println("转账成功");

    }

    else

    System.out.println("余额不足,转账失败!");

    }

    void chaxun(){

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

    }

    }

    public class Atm {

     

    public static void main(String[] args) {

    // TODO 自动生成的方法存根

     

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

    Scanner in0 =  new Scanner(System.in);

    int ma=in0.nextInt();

    Manager A=new Manager("123","li","1111",123,1000);

    if(ma==A.getmima()){

     

    A.jiemian();

    int i=1;

    while(i==1){

    Scanner in =  new Scanner(System.in);//定义一个Scanner对象

      System.out.println("请输入数字(1:存款 2:取款 3:汇款 4:修改密码 5:查询余额 6:退出):");

      int n = in.nextInt();

      if(n==1)

      A.cunkuan();

      if(n==2){

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

    Scanner in1 =  new Scanner(System.in);//定义一个Scanner对象

    System.out.println("请输入选项:(1100 2500 31000 41500 52000 65000 7:其他金额)");

    int a=in1.nextInt();

    double yu=A.getyue();

    if(a==1)

    { yu=A.getyue();

    A=new Qukuan1("123","li","1111",123,yu);A.qukuan();}

    if(a==2)

    { yu=A.getyue();

    A=new Qukuan2("123","li","1111",123,yu);A.qukuan();}

    if(a==3)

    { yu=A.getyue();

    A=new Qukuan3("123","li","1111",123,yu);A.qukuan();}

    if(a==4)

    { yu=A.getyue();

    A=new Qukuan4("123","li","1111",123,yu);A.qukuan();}

    if(a==5)

    { yu=A.getyue();

    A=new Qukuan5("123","li","1111",123,yu);A.qukuan();}

    if(a==6)

    { yu=A.getyue();

    A=new Qukuan6("123","li","1111",123,yu);A.qukuan();}

    if(a==7)

    { yu=A.getyue();

    A=new Qukuan7("123","li","1111",123,yu);A.qukuan();}

      }

      if(n==3)

      A.zhuanzhang();

      if(n==4)

      A.mima();

      if(n==5)

      A.chaxun();

      if(n==6)

      {

      i=0;

      System.out.println("欢迎再次使用!!!");

      }

    }

    }

    else

     System.out.println("密码错误,该卡已被锁定!");

    }

     

     

    }

    2、结果截图

     

    ·这个特性实际上就是面向对象“多态”特性的具体表现。

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

    ·如果子类被当作父类使用,则通过子类访问的字段是父类的!

  • 相关阅读:
    客户端验证用户名和密码
    特殊日期提示
    python 多态这一部分的知识点相关应用
    类的继承
    栈,队列的应用
    生成器与for循环的纠葛
    类(class)的形成过程
    报错信息看着哇
    死脑筋要活用(我只放贴图)01
    正则运算跟py语言的结合,知识点层出不穷
  • 原文地址:https://www.cnblogs.com/lhj1017/p/6079270.html
Copyright © 2020-2023  润新知