zoukankan      html  css  js  c++  java
  • 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)结果截图:

  • 相关阅读:
    DB2 for Z/os Statement prepare
    Foreign key (referential) constraints on DB2 LUW v105
    复制Informational constraints on LUW DB2 v105
    DB2 SQL Mixed data in character strings
    DB2 create partitioned table
    MVC中使用EF的技巧集(一)
    Asp.Net MVC 开发技巧(二)
    Linq使用技巧及查询示例(一)
    Asp.Net MVC 开发技巧(一)
    Asp.Net MVC Identity 2.2.1 使用技巧(八)
  • 原文地址:https://www.cnblogs.com/gxt-/p/6077562.html
Copyright © 2011-2022 走看看