知识点一:类型转换
源代码:
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=d;
//d=m;//编译不通过
d=(Dog)m;
//d=c;//编译不通过
c=(Cat)m;
}
}
子类能赋给父类,改变父类的方法,但不改变父类中的变量。
知识点二:类的继承
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++,这时改变的将是覆盖父类的子类。
实验任务一:ATM
源代码:
//ATM
//Han Yang 2016\11\15
import java.util.Scanner;
public class ATM {
private String Account;
private String mima;
private String name;
private String Date;
private double YuE;
ATM(String a,String b,String c,String d,double e){
Account = a;
mima = b;
name = c;
Date = d;
YuE = e;
}
void setYuE(double m)
{
YuE = m;
}
void setMima(String a){
mima = a;
}
String getName(){return name;}
String getMima(){return mima;}
double getYue(){return YuE;}
static void meno1(){
System.out.println("1、存款\n2、取款\n3、转账汇款\n4、修改密码\n5、查询余额\n0、退出");
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner in1 = new Scanner(System.in);
Scanner in2 = new Scanner(System.in);
Scanner in3 = new Scanner(System.in);
Scanner in4 = new Scanner(System.in);
Scanner in5 = new Scanner(System.in);
ATM[] a = new ATM[20];
int num=1;
int j;
a[0] = new ATM("1111111111","123456","hanhan","2016\11\15",1000);
System.out.println("请插卡:");
System.out.println("请输入密码:");
String mi = in1.next();
for(int i=0;i<num;i++)
{
if(mi .equals(a[i].getMima()) )
{
System.out.println("密码 正确");
meno1();
double qian_num;
j=in2.nextInt();
while(j!=0)
{
if(j==1)
{
System.out.println("请放入少于100张钞票:");
qian_num=in3.nextDouble();
a[i].setYuE(a[i].getYue()+qian_num);
System.out.println("存钱成功");
}
if(j==2)
{
System.out.println("请输入要进取款的金额:1、100 2、500 3、1000 4、1500 5、2000 6、5000 7、其他 8、退卡");
int k;
k=in2.nextInt();
if(k==1)
a[i].setYuE(a[i].getYue()-100);
else if(k==2)
a[i].setYuE(a[i].getYue()-500);
else if(k==3)
a[i].setYuE(a[i].getYue()-1000);
else if(k==4)
a[i].setYuE(a[i].getYue()-1500);
else if(k==5)
a[i].setYuE(a[i].getYue()-2000);
else if(k==6)
a[i].setYuE(a[i].getYue()-5000);
else if(k==7)
{qian_num = in4.nextDouble();
a[i].setYuE(a[i].getYue()-qian_num);}
}
if(j==3)
{
System.out.println("请输入要转账的账号 :");
String a1;
a1 = in5.next();
System.out.println("请输入要转账的金额 :");
String a2;
a2 = in5.next();
System.out.println("转账成功! :");
}
if(j==4)
{
System.out.println("请输入修改后的密码 :");
String a1;
a1 = in5.next();
a[i].setMima(a1);
}
if(j==5)
{
System.out.println("余额 :"+a[i].getYue());
}
meno1();
j=in2.nextInt();
}
}
else if(i == num)
System.out.println("密码错误,该卡锁定。");
}
in1.close();
in2.close();
in3.close();
in4.close();
in5.close();
}
}
程序截图: