• JAVA08 多态


    多态:相同的一条语句,在不同的运行环境中可以产生不同的运行结果。

    子类对象可以直接赋给基类变量。
    基类对象要赋给子类对象变量,必须执行类型转换,其语法是:
    子类对象变量=(子类名)基类对象名;

    一.动手动脑

    1)源代码:

     1 public class ParentChildTest {
     2     public static void main(String[] args) {
     3         Parent parent=new Parent();
     4         parent.printValue();
     5         Child child=new Child();
     6         child.printValue();
     7         
     8         parent=child;
     9         parent.printValue();
    10         
    11         parent.myValue++;
    12         parent.printValue();
    13         
    14         ((Child)parent).myValue++;
    15         parent.printValue();
    16         
    17     }
    18 }
    19 
    20 class Parent{
    21     public int myValue=100;
    22     public void printValue() {
    23         System.out.println("Parent.printValue(),myValue="+myValue);
    24     }
    25 }
    26 class Child extends Parent{
    27     public int myValue=200;
    28     public void printValue() {
    29         System.out.println("Child.printValue(),myValue="+myValue);
    30     }
    31 }

    2)实验截图:

    3)结果分析:

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

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

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

    二.动手动脑 动物园(使用接口代替抽象基类)

    1)源代码:

     1 import java.util.Vector;
     2 public class zoo4 {
     3     public static void main(String[] args) {
     4          Feeder f = new Feeder("小李");
     5          Vector<Animal> ans = new Vector<Animal>();
     6 
     7          //饲养员小李喂养一只狮子
     8          ans.add(new Lion());
     9          //饲养员小李喂养十只猴子
    10          for (int i = 0; i < 10; i++) {
    11              ans.add(new Monkey());
    12          }
    13          //饲养员小李喂养5只鸽子
    14          for (int i = 0; i < 5; i++) { 
    15              ans.add(new Pigeon());
    16          }
    17                 
    18          f.feedAnimals(ans);
    19    }
    20 }
    21 
    22 class Feeder {//饲养员类
    23     public String name;
    24     Feeder(String name) {
    25         this.name = name;
    26     }
    27     public void feedAnimals(Vector<Animal> ans) {
    28         for (Animal an : ans) {
    29             an.eat();
    30             }
    31         }
    32 }
    33 
    34 interface Animal {//动物基类
    35     public abstract void eat();
    36         }
    37 
    38 class Lion implements Animal {//狮子类
    39     public void eat() {
    40         System.out.println("我不吃肉谁敢吃肉!");
    41             }
    42 }
    43 
    44 class Monkey implements Animal {//猴子类
    45     public void eat() {
    46         System.out.println("我什么都吃,尤其喜欢香蕉。");
    47             }
    48 }
    49 
    50 class Pigeon implements Animal {
    51     public void eat() {
    52         System.out.println("我要减肥,所以每天只吃一点大米。");
    53         }
    54 }

    2)实验截图:

    三.动手动脑

    1)源代码:

      1 //1115 
      2 import java.util.*;
      3 public class Ex1115 {
      4 
      5     public static void main(String[] args) {
      6         Account a = new Account("11111111111","dsdf","20161115","256398",23.6);
      7         a.jiemian();
      8     }
      9 }
     10 
     11 class Account
     12 {
     13     private static final String JOptionPane = null;
     14     private  static String Id;
     15     private static String name;
     16     private static String date;
     17     private static String mima;
     18     private static double extra;
     19     
     20     Account(String i,String n,String d,String m,double e)//构造函数
     21     {
     22         Id=i;
     23         name=n;
     24         date=d;
     25         mima=m;
     26         extra=e;
     27     }
     28     
     29     public void set_Id(String i){
     30         Id=i;
     31     }
     32     public void set_name(String n){
     33         name=n;;
     34     }
     35     public void set_date(String d){
     36         date=d;
     37     }
     38     public void set_mima(String m){
     39         mima=m;
     40     }
     41     public void set_extra(double e){
     42         extra=e;
     43     }
     44     
     45     public String get_Id(){
     46         return Id;
     47     }
     48     public String get_name(){
     49         return name;
     50     }
     51     public String get_date(){
     52         return date;
     53     }
     54     public String get_mima(){
     55         return mima;
     56     }
     57     public double get_extra(){
     58         return extra;
     59     }
     60     
     61     
     62     public static void jiemian()//界面
     63     {
     64         System.out.println("请选择界面(1.中文2.英文):");
     65         Scanner sc=new Scanner(System.in);
     66         String num1=sc.nextLine();
     67         int num11=Integer.parseInt(num1);
     68         
     69         if(num11==1){
     70             
     71             Scanner sc1=new Scanner(System.in);
     72             int num=Integer.parseInt(sc1.nextLine());
     73 
     74             while(true)
     75             {
     76                     System.out.println("请选择要进行的操作:");
     77                     System.out.println("1.取款");
     78                     System.out.println("2.存款");
     79                     System.out.println("3.转账");
     80                     System.out.println("4.修改密码");
     81                     System.out.println("5.查询余额");
     82                     System.out.println("6.退卡");
     83                     
     84                 if(num==1)
     85                     qukuan();
     86                 else if(num==2)
     87                     cunkuan();
     88                 else if(num==3)
     89                     zhuan();
     90                 else if(num==4)
     91                     xiugai();
     92                 else if(num==5)
     93                     chaxun();
     94                 else if(num==6){
     95                     System.out.println("退卡成功!");
     96                 }
     97             }
     98         }
     99         
    100         else{
    101             
    102         }
    103     
    104     }
    105     
    106     public static void cunkuan()//存款
    107     {
    108         System.out.println("请输入存款金额:");
    109         Scanner sc = new Scanner(System.in);
    110         int jine = Integer.parseInt(sc.nextLine());
    111         
    112         extra += jine;
    113         System.out.println("您现在的金额为:" + extra);
    114     }
    115     
    116     public static void qukuan()//取款
    117     {
    118         System.out.println("请输入取款金额");
    119         String output="";
    120         output += "100  "
    121                 + "
    500 "
    122                 + "
    1000  "
    123                 + "
    1500 "
    124                 + "
    2000 "
    125                 + "
    5000  "
    126                 + "
    其他金额(请输入0)"
    127                 + "
    返回操作(请输入-1) "
    128                 + "
    退卡(请输入-2)";
    129         System.out.println(output);
    130 
    131         Scanner sc=new Scanner(System.in);
    132         int num=Integer.parseInt(sc.nextLine());
    133         
    134         switch(num)
    135         {
    136         case 100:{
    137             
    138         }
    139             extra -= 100;break;
    140         case 500:
    141             extra -= 500;break;
    142         case 1000:
    143             extra -= 1000;break;
    144         case 1500:
    145             extra -= 1500;break;
    146         case 2000:
    147             extra -= 2000;break;
    148         case 5000:
    149             extra -= 5000;break;
    150         case 0:
    151         {
    152             System.out.println("请输入取款金额:");
    153             Scanner sc1=new Scanner(System.in);
    154             int jine=Integer.parseInt(sc1.nextLine());
    155             extra -= jine;
    156             sc1.close();
    157             break;
    158         }
    159         case -1:
    160             System.out.println("已返回操作界面");break;
    161         case -2:
    162             System.out.println("退卡成功!");break;
    163         }
    164     }
    165     
    166     public static void zhuan()//转账汇款
    167     {
    168         System.out.println("请输入转账行号:");
    169         Scanner sc = new Scanner(System.in);
    170         String hanghao = sc.nextLine();
    171         
    172         Scanner sc1 = new Scanner(System.in);
    173         int jine = Integer.parseInt(sc1.nextLine());
    174         
    175         extra -= jine;
    176         
    177         System.out.println("转账成功!");
    178     }
    179     
    180     public static void xiugai()//修改密码
    181     {
    182         System.out.println("请输入要修改的密码:");
    183         Scanner sc1 = new Scanner(System.in);
    184         String mi = sc1.nextLine();
    185         mima = mi;
    186     }
    187     
    188     public static void chaxun()//查询余额
    189     {
    190         System.out.println("余额为:"+extra);
    191     }
    192     
    193 }

    2)结果截图:

  • 相关阅读:
    【todo】深入理解设计模式
    一个最简单的LRUCache实现 (JAVA)
    Redis之AOF重写及其实现原理
    【todo】nosql 的几种类型研究
    【todo】redis 中的hyperloglog原理
    【todo】ER分片
    【todo】研究一下mycat的原理
    【todo】研究一下sharding-jdbc的原理
    为什么存储过程比sql语句效率高?
    存储过程这一篇就够了
  • 原文地址:https://www.cnblogs.com/gxt-/p/6077562.html
Copyright © 2020-2023  润新知