多态

一、课堂动脑总结

1、源代码

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

}

}

2、结果截图

3、总结
当子类与父类拥有一样的方法,并且让一个父类变量引用一个子类对象时,到底调用哪个方法,由对象自己的
“真实”类型所决定:对象是子类型的,它就调用子类型的方法,是父类型的,它就调用父类型的方法。如果子类与父类有相同的字段,则子类中的字段会代替或隐藏父类的字段,子类方法中访问的是子类中的字段,而不是父类中的字段。如果子类方法确实想访问父类中被隐藏的同名字段,可以用super关键字来访问它。如果子类被当作父类使用,则通过子类访问的字段是父类的!

二、多态Atm

1、源代码

package Guidang8;

 

import java.util.Scanner;

class Qukuan1 extends Manager{

Qukuan1(String kahao,String name,String Date,int mima,double yue){

super(kahao,name,Date,mima,yue);

}

void qukuan(){

yue=yue-100;

if(yue>=0){

setyue(yue);

}

else

System.out.println("余额不足!");

}

}

class Qukuan2 extends Manager{

Qukuan2(String kahao, String name, String Date, int mima, double yue) {

super(kahao, name, Date, mima, yue);

// TODO 自动生成的构造函数存根

}

 

void qukuan(){

yue=yue-500;

if(yue>=0){

setyue(yue);

}

else

System.out.println("余额不足!");

}

}

class Qukuan3 extends Manager{

Qukuan3(String kahao, String name, String Date, int mima, double yue) {

super(kahao, name, Date, mima, yue);

// TODO 自动生成的构造函数存根

}

 

void qukuan(){

yue=yue-1000;

if(yue>=0){

setyue(yue);

}

else

System.out.println("余额不足!");

}

}

class Qukuan4 extends Manager{

Qukuan4(String kahao, String name, String Date, int mima, double yue) {

super(kahao, name, Date, mima, yue);

// TODO 自动生成的构造函数存根

}

 

void qukuan(){

yue=yue-1500;

if(yue>=0){

setyue(yue);

}

else

System.out.println("余额不足!");

}

}

class Qukuan5 extends Manager{

Qukuan5(String kahao, String name, String Date, int mima, double yue) {

super(kahao, name, Date, mima, yue);

// TODO 自动生成的构造函数存根

}

 

void qukuan(){

yue=yue-2000;

if(yue>=0){

setyue(yue);

}

else

System.out.println("余额不足!");

}

}

class Qukuan6 extends Manager{

Qukuan6(String kahao, String name, String Date, int mima, double yue) {

super(kahao, name, Date, mima, yue);

// TODO 自动生成的构造函数存根

}

 

void qukuan(){

yue=yue-5000;

if(yue>=0){

setyue(yue);

}

else

System.out.println("余额不足!");

}

}

class Qukuan7 extends Manager{

Qukuan7(String kahao, String name, String Date, int mima, double yue) {

super(kahao, name, Date, mima, yue);

// TODO 自动生成的构造函数存根

}

 

void qukuan(){

Scanner in =  new Scanner(System.in);

System.out.println("请输入取款金额:");

int d=in.nextInt();

yue=yue-d;

if(yue>=0){

setyue(yue);

}

else

System.out.println("余额不足!");

}

}

 

class Manager {

private String kahao;

private String name;

private String Date;

private int mima;

protected double yue;

Manager(String kahao,String name,String Date,int mima,double yue){

this.kahao=kahao;

this.name=name;

this.Date=Date;

this.mima=mima;

this.yue=yue;

}

public void setkahao(String kahao){

this.kahao=kahao;

}

public String getkahao(){

return kahao;

}

public void setname(String name){

this.name=name;

}

 

public String getname(){

return name;

}

public void setDate(String Date){

this.Date=Date;

}

public String getDate(){

return Date;

}

public void setmima(int mima){

this.mima=mima;

}

public int getmima(){

return mima;

}

public void setyue(double yue){

this.yue=yue;

}

public double getyue(){

return yue;

}

 

 

void jiemian(){

System.out.println("******************************************************");

System.out.println("  ATM       ");

System.out.println("******************************************************");

System.out.println(" 1、存款");

System.out.println(" 2、取款");

System.out.println(" 3、汇款");

System.out.println(" 4、修改密码");

System.out.println(" 5、查询余额");

System.out.println(" 6、退出程序");

System.out.println("******************************************************");

}

void cunkuan(){

Scanner in =  new Scanner(System.in);//定义一个Scanner对象

Scanner in1 =  new Scanner(System.in);

System.out.println("请输入存款金额:");

double yu1 = in.nextInt();

yue=yue+yu1;

setyue(yue);

 

}

void qukuan(){}

 

void mima(){

Scanner in =  new Scanner(System.in);

System.out.println("请输入修改的密码:");

int mi=in.nextInt();

setmima(mi);

System.out.println("修改成功!");

}

void zhuanzhang(){

System.out.println("请输入转账帐号:");

Scanner in =  new Scanner(System.in);

String b=in.next();

System.out.println("请输入转账金额:");

int c=in.nextInt();

yue=yue-c;

if(yue>=0){

setyue(yue);

System.out.println("转账成功");

}

else

System.out.println("余额不足,转账失败!");

}

void chaxun(){

System.out.println("余额:"+getyue());

}

}

public class Atm {

 

public static void main(String[] args) {

// TODO 自动生成的方法存根

 

System.out.println("请输入密码:");

Scanner in0 =  new Scanner(System.in);

int ma=in0.nextInt();

Manager A=new Manager("123","li","1111",123,1000);

if(ma==A.getmima()){

 

A.jiemian();

int i=1;

while(i==1){

Scanner in =  new Scanner(System.in);//定义一个Scanner对象

  System.out.println("请输入数字(1:存款 2:取款 3:汇款 4:修改密码 5:查询余额 6:退出):");

  int n = in.nextInt();

  if(n==1)

  A.cunkuan();

  if(n==2){

  System.out.println("请输入取款金额:");

Scanner in1 =  new Scanner(System.in);//定义一个Scanner对象

System.out.println("请输入选项:(1100 2500 31000 41500 52000 65000 7:其他金额)");

int a=in1.nextInt();

double yu=A.getyue();

if(a==1)

{ yu=A.getyue();

A=new Qukuan1("123","li","1111",123,yu);A.qukuan();}

if(a==2)

{ yu=A.getyue();

A=new Qukuan2("123","li","1111",123,yu);A.qukuan();}

if(a==3)

{ yu=A.getyue();

A=new Qukuan3("123","li","1111",123,yu);A.qukuan();}

if(a==4)

{ yu=A.getyue();

A=new Qukuan4("123","li","1111",123,yu);A.qukuan();}

if(a==5)

{ yu=A.getyue();

A=new Qukuan5("123","li","1111",123,yu);A.qukuan();}

if(a==6)

{ yu=A.getyue();

A=new Qukuan6("123","li","1111",123,yu);A.qukuan();}

if(a==7)

{ yu=A.getyue();

A=new Qukuan7("123","li","1111",123,yu);A.qukuan();}

  }

  if(n==3)

  A.zhuanzhang();

  if(n==4)

  A.mima();

  if(n==5)

  A.chaxun();

  if(n==6)

  {

  i=0;

  System.out.println("欢迎再次使用!!!");

  }

}

}

else

 System.out.println("密码错误,该卡已被锁定!");

}

 

 

}

2、结果截图

 

·这个特性实际上就是面向对象“多态”特性的具体表现。

·如果子类与父类有相同的字段,则子类中的字段会代替或隐藏父类的字段,子类方法中访问的是子类中的字段(而不是父类中的字段)。如果子类方法确实想访问父类中被隐藏的同名字段,可以用super关键字来访问它。

·如果子类被当作父类使用,则通过子类访问的字段是父类的!

原文地址:https://www.cnblogs.com/lhj1017/p/6079270.html