Java基本功练习十六(继承和多态【继承多态覆盖练习、多重继承、数组线性表ArrayList、银行账户类升级】)

本文深入探讨Java中的继承和多态,通过实例讲解继承多态的基本概念,展示了如何使用super关键字以及可见性修饰符。文章还升级了一个银行账户类,增加了name属性、交易记录功能,并利用ArrayList存储Transaction类实例,同时提供了测试用例和相关注意事项。

本博文将讲述类的继承和多态的相关情况。

在面向对象程序设计中,可以从已有的类派生出新类,这称为继承。继承是Java在软件重用方面一个重要且功能强大的特征。假设要定义一个类,对圆、矩形和三角形建模。这些类有很多特性。设计这些类来避免冗余并使系统更易于理解和维护的最好办法就是继承。

面向对象语言中,接口的多种不同的实现方式即为多态。多态性是允许将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。归结为一句话:允许将子类类型赋值给父类类型,这有别与C++中的多态(通过虚函数实现)。

范例一:继承多态基本概念用法练习。

运行效果如图:


其实现的源代码如下所示:(其中包括自定义一个堆栈类MyStack的实现)

package Blog;

import java.util.Date;

public class blogTryProject{
	public static void main(String[] args) {
		//父类与子类
		TestCircleRectangle tcr = new TestCircleRectangle();
		tcr.main(args);
		
		//动态绑定
		System.out.println("\n动态绑定实例演示");
		m(new GraduateStudent());
		m(new Student());
		m(new Person());
		m(new Object());
		
		//继承与多态
		System.out.println("\n多态和类型转换演示");
		CastingDemo cd = new CastingDemo();
		cd.main(args);
		
		//ArrayList数组线性表
		System.out.println("\nArrayList数组线性表");
		TestArrayList tal = new TestArrayList();
		tal.main(args);
		
	}
	public static void m(Object x){
		System.out.println(x.toString());
	}
}
//MyStack自定义栈类
class MyStack{
	private java.util.ArrayList list = new java.util.ArrayList();
	
	public boolean isEmpty(){
		return list.isEmpty();
	}
	public int getSize(){
		return list.size();
	}
	public Object peek(){
		return list.get(getSize() - 1);
	}
	public Object pop(){
		Object o = list.get(getSize() - 1);
		list.remove(getSize() - 1);
		return o;
	}
	public void push(Object o){
		list.add(o);
	}
	public int search(Object o){
		return list.lastIndexOf(o);
	}
	public String toString(){
		return "Stack: "+list.toString();
	}
}

//ArrayList数组线性表
class TestArrayList{
	public static void main(String[]args){
		java.util.ArrayList cityList = new java.util.ArrayList();
		cityList.add("London");
		cityList.add("Denver");
		cityList.add("Paris");
		cityList.add("Miami");
		cityList.add("Seoul");
		cityList.add("Tokyo");
		
		System.out.println("List size? "+cityList.size());
		System.out.println("Is Miami in the list ? "+cityList.contains("Miami"));
		System.out.println("The location fo Denver in the list ?"+cityList.indexOf("Denver"));
		System.out.println("Is the list empty? "+cityList.isEmpty());
		
		cityList.add(2, "Xian");
		cityList.remove("Miami");
		cityList.remove(1);
		System.out.println(cityList.toString());
		
		for(int i = cityList.size() - 1;i >= 0;i--)
			System.out.print(cityList.get(i)+" ");
		System.out.println();
		
		java.util.ArrayList list = new java.util.ArrayList();
		list.add(new Circle1(2));
		list.add(new Circle1(3));
		System.out.println("The area of the circle? "+((Circle1)list.get(0)).getArea());
		
	}
}



//多态和类型转换
class CastingDemo{
	public static void main(String[]args){
		Object object1 = new Circle1(1);
		Object object2 = new Rectangle1(1,1);
		displayObject(object1);
		displayObject(object2);
	}
	public static void displayObject(Object object){
		if(object instanceof Circle1){
			System.out.println("The circle diameter is "+((Circle1)object).getDiameter());
			System.out.println("The circle area is "+((Circle1)object).getArea());
		}
		else if(object instanceof Rectangle1){
			System.out.println("The rectangle area is "+((Rectangle1)object).getArea());
		}
	}
}

//动态绑定实例
class DynamicBindingDemo{
	public static void main(String[]args){
		
	}
}
class GraduateStudent extends Student{
}
class Student extends Person{
	public String toString(){
		return "Student";
	}
}
class Person extends Object{
	public String toString(){
		return "Person";
	}
}


//父类子类继承及其使用
class TestCircleRectangle{
	public static void main(String[]args){
		System.out.println("父类子类继承及其使用");
		Circle1 circle = new Circle1(5);
		System.out.println("A circle "+circle.toString());
		System.out.println("The radius is "+circle.getRadius());
		System.out.println("The area is 
要求编写程序模拟银行账户的存、取款操作。按要求完成以下步骤: 步骤1编写程序Account.java,其中定义银行账户Account。该中有账号、姓名、 存款余额等数据域,余额默认是0;有存款、取款、获取当前余额等方法。其中账号为长度 为12位数字的字符串,姓名为字符串,存款余额为double。 步骤2:编写名为CreditAccount的信用卡账户。该继承自Account,增加一 个透支限额(double)数据域,透支限额默认为1000。同时该账户取款时允许透支,但不 能超过透支限额。 步骤3:编写名为SavingAccount的储蓄账户SavingAccount。该继承自Account 。该账户取款时不允许透支。 步骤4:编写名为Bank的模拟银行,其中可以存储多个型可能是信用卡账户或储 蓄账户的对象(可以用数组ArrayList实现)。该包含以下方法: 开户:即增加一个新的账户,注意:不允许两个账户的账号相同 销户:即删除一个已有的账户 查询账户:根据一个账号,查询有无该账号的账户 统计目前银行的存款总余额的方法。 统计目前银行的信用卡账户总透支金额的方法。 统计目前总账户数。 统计目前信用卡账户数 统计目前储蓄卡账户数 步骤5编写客户端Client.java完成以下功能: 编写一个静态方法,创建一个银行对象,并随机生成10个账号从1000 0000 0000 0000到1000 0000 0000 0009,型不同的账户。 main方法中模拟几次开户操作。 main方法中模拟几次销户操作。 模拟几个对指定账号的存款取款操作。 输出银行的总账户数、总余额、总透支数、各具体账户数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值