一.下列語句哪個將引發編譯錯誤?爲何?哪個會引發運行時錯誤?爲何?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
![](http://static.javashuo.com/static/loading.gif)
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來訪問,反之則一直被子類覆蓋。父類被覆蓋時,對父類中的變量進行操做時,父類中的變量改變,但輸出時仍輸出覆蓋父類的子類的變量。能夠對父類操做前強制轉化爲對子類的操做,即(child)Parent.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