一.动手动脑
public classParentChildTest {public static voidmain(String[] args) {
Parent parent=newParent();
parent.printValue();
Child child=newChild();
child.printValue();
parent=child;
parent.printValue();
parent.myValue++;
parent.printValue();
((Child)parent).myValue++;
parent.printValue();
}
}classParent{public int myValue=100;public voidprintValue() {
System.out.println("Parent.printValue(),myValue="+myValue);
}
}class Child extendsParent{public int myValue=200;public voidprintValue() {
System.out.println("Child.printValue(),myValue="+myValue);
}
}
截图结果
结论:
当子类与父类拥有一样的方法,并且让一个父类变量引用一个子类对象时,到底调用哪个方法,由对象自己的“真实”类型所决定。
这就是说:对象是子类型的,它就调用子类型的方法,是父类型的,它就调用父类型的方法。
如果子类与父类有相同的字段,则子类中的字段会代替或隐藏父类的字段,子类方法中访问的是子类中的字段(而不是父类中的字段)。如果子类方法确实想访问父类中被隐藏的同名字段,可以用super关键字来访问它。
如果子类被当作父类使用,则通过子类访问的字段是父类的!
二:动手动脑
动物园
public class Zoo
{
public static void main(String args[])
{
Feeder f = new Feeder("小李");
//饲养员小李喂养一只狮子
f.feedAnimal(new Lion());
//饲养员小李喂养十只猴子
for (int i = 0; i < 10; i++)
{
f.feedAnimal(new Monkey());
}
//饲养员小李喂养5只鸽子
for (int i = 0; i < 5; i++)
{
f.feedAnimal(new Pigeon());
}
}
}
class Feeder
{
public String name;
Feeder(String name)
{
this.name = name;
}
public void feedAnimal(Animal an)
{
an.eat();
}
}
abstract class Animal
{
public abstract void eat();
}
class Lion extends Animal
{
public void eat()
{
System.out.println("我不吃肉谁敢吃肉!");
}
}
class Monkey extends Animal
{
public void eat()
{
System.out.println("我什么都吃,尤其喜欢香蕉。");
}
}
class Pigeon extends Animal
{
public void eat()
{
System.out.println("我要减肥,所以每天只吃一点大米。");
}
}
ATM机的实现:
import java.util.Scanner;
public class ATM {
private static String name;
private static String Data;
private static String mima;
static double money;
static ATM code=new ATM("岳志浩","11.13","123456",1000);
static Scanner str=new Scanner(System.in);
public ATM(String name1,String Data1,String mima1,double money1)
{
name=name1;
Data=Data1;
mima=mima1;
money=money1;
}
/*public static void qu()
{
System.out.println("选择存取金额"+"\n"+"1、100元"+"\n"+"2、500"+"\n"+"3、1000"+"\n"+"4、1500"+"\n"+"5、2000"+"\n"+"6、5000"+"\n"+"7、其他金额");
int caozuo=str.nextInt();
if(caozuo==1)
{
if(money<100)
{
System.out.println("余额不足");
qu();
}
money=money-100;
System.out.println("余额"+money);
}
if(caozuo==2)
{
if(money<500)
{
System.out.println("余额不足");
qu();
}
money=money-500;
System.out.println("余额"+money);
}
if(caozuo==3)
{
if(money<1000)
{
System.out.println("余额不足");
qu();
}
money=money-1000;
System.out.println("余额"+money);
}
if(caozuo==4)
{
if(money<1500)
{
System.out.println("余额不足");
qu();
}
money=money-1500;
System.out.println("余额"+money);
}
if(caozuo==5)
{
if(money<2000)
{
System.out.println("余额不足");
qu();
}
money=money-2000;
System.out.println("余额"+money);
}
if(caozuo==6)
{
if(money<5000)
{
System.out.println("余额不足");
qu();
}
money=money-5000;
System.out.println("余额"+money);
}
if(caozuo==7)
{
double money1=str.nextDouble();
money=money-money1;
System.out.println("余额"+money);
}
}
*/
public static void qu()
{
System.out.println("选择存取金额"+"\n"+"1、100元"+"\n"+"2、500"+"\n"+"3、1000"+"\n"+"4、1500"+"\n"+"5、2000"+"\n"+"6、5000"+"\n"+"7、其他金额");
int caozuo=str.nextInt();
Qu a=new Qu();
if(caozuo==1)
{
Qu100 b=new Qu100();
a=b;
b.qu(code);
System.out.println("余额"+money);
}
if(caozuo==2)
{
Qu500 b=new Qu500();
a=b;
b.qu(code);
System.out.println("余额"+money);
}
if(caozuo==3)
{
Qu1000 b=new Qu1000();
a=b;
a.qu(code);
System.out.println("余额"+money);
}
if(caozuo==4)
{
Qu1500 b=new Qu1500();
a=b;
a.qu(code);
System.out.println("余额"+money);
}
if(caozuo==5)
{
Qu2000 b=new Qu2000();
a=b;
a.qu(code);
System.out.println("余额"+money);
}
if(caozuo==6)
{
Qu5000 b=new Qu5000();
a=b;
a.qu(code);
System.out.println("余额"+money);
}
}
public static void zhuan()
{
System.out.println("输入要转入的卡号");
String ka=str.next();
System.out.println("输入要转入金额");
double money1=str.nextDouble();
money=money-money1;
System.out.println("转账成功");
}
public static void cun()
{
System.out.println("输入存取金额");
double money1=str.nextDouble();
money=money+money1;
System.out.println("余额"+money);
}
public static void xugai()
{
System.out.println("输入要修改的密码");
String mima1=str.next();
mima=mima1;
}
public static void main(String args[])
{
System.out.println("输入密码");
String mima1=str.next();
if(mima1.equals(ATM.mima))
{
int x=0;
while (x!=5)
{
if(x==1)
{
qu();
}
if(x==2)
{
cun();
}
if(x==3)
{
zhuan();
}
if(x==4)
{
xugai();
}
if(x==5)
{
System.out.println("用户名:"+name+"日期:"+Data+"余额:"+money);
break;
}
System.out.println("选择操作");
System.out.print("1.取款"+"\n"+"2.存款"+"\n"+"3.转账"+"\n"+"4.修改密码"+"\n"+"5.退卡");
int w=str.nextInt();
x=w;
}
}
else
{
System.out.println("密码错误");
}
}
}
class Qu
{
public void qu(ATM a)
{
}
}
class Qu100 extends Qu
{
public void qu(ATM a)
{
a.money=a.money-100;
}
}
class Qu500 extends Qu
{
public void qu(ATM a)
{
a.money=a.money-500;
}
}
class Qu1000 extends Qu
{
public void qu(ATM a)
{
a.money=a.money-1000;
}
}
class Qu1500 extends Qu
{
public void qu(ATM a)
{
a.money=a.money-1500;
}
}
class Qu2000 extends Qu
{
public void qu(ATM a)
{
a.money=a.money-2000;
}
}
class Qu5000 extends Qu
{
public void qu(ATM a)
{
a.money=a.money-5000;
}
}
结果截图