Java課堂 動手動腦6

.下列語句哪個將引發編譯錯誤?爲何?哪個會引發運行時錯誤?爲何?java

m=d;d=m;d=(Dog)m;d=c;c=(Cat)m;測試

先進行自我判斷,this

1、代碼:spa

 

class Mammal{}
class Dog extends Mammal {}
class Cat extends Mammal{}
public class TestCast
{
    public static void main(String args[])
    {
        Mammal m;
        Dog d=new Dog();
        Cat c=new Cat();
        
        //m=c;c=(Cat)m;
        
        //d=m;錯誤
        m=d;
        d=(Dog)m;
        //d=c;錯誤的
    }
}

2判斷在代碼裏。code

 
 

3總結:子類能賦給父類,改變父類的方法,但不改變父類中的變量。父類賦值給子類,須要肯定是給的那個子類,不然會出錯。blog

 
 

二.運行如下測試代碼get

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

結論:子類能覆蓋父類,可是父類中的變量的值是不改變的,訪問父類中的變量時可用super來訪問,反之則一直被子類覆蓋。父類被覆蓋時,對父類中的變量進行操做時,父類中的變量改變,但輸出時仍輸出覆蓋父類的子類的變量。能夠對父類操做前強制轉化爲對子類的操做,即(childParent.myValue++,這時改變的將是覆蓋父類的子類it

3、ATM編譯

import java.util.Scanner;
class Account
{
    private String code    =null;   //信用卡號
     protected String key=null;   //客戶密碼
     protected double money   =0.0;   //卡里金額
     public Account(String code,String key,double money)
     {
      this.code=code;
      this.key=key;
      this.money=money;
     }
     String get_Code() {
          return code;
         }
     String get_Key() {
          return key;
         }
     double get_Money() {
          return money;
         }
     void set_Balance(double mon) {
          money -= mon;
         }
}
class make extends Account
{
    public make(String code,String key,double money) {
        super(code,key,money);
    }     
     void Welcome()
     {
        Scanner a=new Scanner(System.in);
        System.out.println("你已進入,請輸入密碼");
        String key1=a.next();
        System.out.println(key);
        if(key1.equals(key))
        {
            System.out.println("密碼正確,您已進入\n");
        }
        else 
        {    
            System.out.println("您的密碼錯誤,系統已退出!");
            System.exit(1);
        }      
      
     }
    void cunkuan()
    {
        Scanner a=new Scanner(System.in);
        System.out.println("請輸入存款金額");
        double money1=a.nextDouble();
        this.money=money+money1;
        System.out.println("您以成功爲你的帳戶存款"+this.money);
    }
    void qukuan()
    {
        Scanner a=new Scanner(System.in);
        System.out.println("取款選項\n100\n200\n500\n1000\n1500\n2000\n5000\n其餘金額\n退卡\n");
        System.out.println("請輸入您須要的取款選項:");
        String aa=a.next();
        if(aa.equals("100"))
        {
            this.money=money-100;
            System.out.println("您以成功取款"+100+"請在取錢口取走你大現金。");
        }
        if(aa.equals("200"))
        {
            this.money=money-200;
            System.out.println("您以成功取款"+200+"請在取錢口取走你大現金。");
        }
        if(aa.equals("500"))
        {
            this.money=money-500;
            System.out.println("您以成功取款"+500+"請在取錢口取走你大現金。");
        }
        if(aa.equals("1000"))
        {
            this.money=money-1000;
            System.out.println("您以成功取款"+1000+"請在取錢口取走你大現金。");
        }
        if(aa.equals("1500"))
        {
            this.money=money-1500;
            System.out.println("您以成功取款"+1500+"請在取錢口取走你大現金。");
        }
        if(aa.equals("2000"))
        {
            this.money=money-2000;
            System.out.println("您以成功取款"+2000+"請在取錢口取走你大現金。");
        }
        if(aa.equals("5000"))
        {
            this.money=money-5000;
            System.out.println("您以成功取款"+5000+"請在取錢口取走你大現金。");
        }
        if(aa.equals("其餘金額"))
        {
            System.out.println("請輸入取款金額:");
            double r=a.nextDouble();
            this.money=money-r;
            System.out.println("您以成功取款"+r+"請在取錢口取走你大現金。");
        }
        if(aa.equals("退卡"))
        {
            System.out.println("請取走您的卡!");
            System.exit(1);
        }
        else
        {
            System.out.println("請取走您的卡!");
            System.exit(1);
        }
    }
    void zhuanZhang()
    {
        System.out.println("請輸入轉帳金額");
        Scanner a=new Scanner(System.in);
        int aa=a.nextInt();
        if(aa<20000)
        {
            this.money=money-aa;
            System.out.println("轉帳操做成功!");
        }
        else{System.out.println("餘額不足,轉帳失敗!");}     
    }
    void caidan()
    {
        System.out.println("【存款---1】");
        System.out.println("【取款---2】");
        System.out.println("【餘額---5】");
        System.out.println("【轉帳---3】");
        System.out.println("【退卡---4】");
        System.out.println("---------");
        System.out.println("請輸入你的操做:");
        System.out.println("請選擇你須要的服務:");
        Scanner a=new Scanner(System.in);
        int num=a.nextInt();
        switch(num) {
          case 1: cunkuan(); break;
          case 2: qukuan(); break;
          case 3: zhuanZhang(); break;
          case 4: System.exit(1); System.out.println("系統已退出!請取走您的卡!"); break;
          }
    }
}
public class ATM {
    public static void main(String[] args) {
        make peo=new make("1212","12345",20000);
        peo.Welcome();
        peo.caidan();
    }
}

 

總結:此程序於學生信息管理類似。改爲多態不是很困難,經過查閱資料和個人努力暫時就作到了這裏,並且編寫這樣的程序使我對多態有了進一步的瞭解,因此我必定會作完它的。ast

相關文章
相關標籤/搜索