Java中的继承

 最近跟着老师学了继承,这里打算根据自己的理解总结一下,方便日后自己复习,因才疏学浅,难免有考虑不周、理解不到位的地方,欢迎大家给出批评意见,大家共同进步。

(一)继承

一、继承的概念

在程序设计中,有时要建立关于某对象的模型,然后要从这个最初的模型派生出多个具体化的版本,比如银行卡类,可以派生出信用卡、借记卡、理财卡等等,显然,这些卡具有银行卡的一般特性,还有银行卡所不具备的其他特性。这时,就可以让这些卡的类继承于银行卡类,那么银行卡就是父类,(这里以信用卡为例)信用卡就是子类,子类可以继承父类的域和方法(之所以说“可以”是因为子类并不一定能够继承父类所有的域和方法,详见③),而且可以对这些域和方法重新定义和扩充新的内容。

注意:

①一个子类只能继承自一个父类(也就是单继承),一个父类可以同时拥有多个子类。 

②子类和父类之间一定存在某些差异性,否则就是同一个类。

③子类可以继承父类所有非私有的数据成员和方法,但不能继承父类的私有数据和方法。

④子类不能继承父类的构造方法。

二、继承的实现

在Java中,继承通过关键字extends来实现,一般格式如下:

【类的修饰符】 class  <子类名>   extends   <父类名>{

<域定义>;

<方法定义>;

}

话不多说,这里直接上代码,以银行卡和信用卡的继承关系来说明。

银行卡类(Account):


public class Account {
	private String name;
	private String aid;
	private double balance;
	//构造方法
	public Account(String name,String aid,double balance) {
		this.name = name;
		this.aid = aid;
		this.balance = balance;
	}
	//存款方法
	public void deposit(double amount) {
		this.balance+=amount;
	}
	//取款方法
	public void withdraw(double amount) {
		if (amount<=balance) {
			this.balance -= amount;
		}
		else {
			System.out.println("余额不足,无法取出");
		}
	}
	//获得余额的方法
	public double getBalance() {
		return balance;
	}
	//设置余额的方法
	public boolean setBalance(double amount) {
		this.balance = amount;
		boolean x=true;
		if (this.balance<0){
			x=false;
		}
		return x;
		
	}


}

信用卡类(CreditAccount):


public class CreditAccount extends Account {
	private double lineOfCredit;//信用卡透支额度
	private double overdraw=this.lineOfCredit;//剩余透支额度,初值为信用卡透支额度
    //构造方法,通过super()方法对父类中定义的变量赋值,因为这些变量在父类中是私有变量,
	//不能被子类继承,不能像lineOfCredit一样赋值。
	public CreditAccount(String name, String aid, double balance,double lineOfCredit) {
		super(name, aid, balance);
		this.lineOfCredit = lineOfCredit;//子类新的变量的赋值
	}
	
	public void line(String lineOfCredit) {
		//透支限额判断,A,B,C,D类信用卡分别代表透支最大额度为10000,5000,2000,1000元。
		if (lineOfCredit == "A") {
		    this.lineOfCredit = 10000;
		}else if(lineOfCredit == "B") {
			this.lineOfCredit = 5000;
		}else if(lineOfCredit == "C") {
			this.lineOfCredit = 2000;
		}else if(lineOfCredit == "D") {
			this.lineOfCredit = 1000;
		}
	}
	

	//对父类中withdraw方法的覆盖,注意方法返回值,名称,数据类型都必须和父类中的方法一样,类的修饰符可以不变或扩大,不能缩小。
	@Override
	public void withdraw(double amount) {
		if (amount<=this.getBalance()+lineOfCredit) {
			this.setBalance(this.getBalance()-amount);
			if (this.setBalance(this.getBalance())==false) {
				overdraw=this.lineOfCredit-this.getBalance()*(-1);
				this.setBalance(0);
			}
		}
		else {
			System.out.println("超出限额,无法取出");
		}
	}
	//剩余透支额度,子类中新的方法
	public double findOverdraw() {
		return overdraw;
	}
	
	public static void main(String[] args) {
		CreditAccount a = new CreditAccount("张三","01",500,1000);
		a.withdraw(200);
		System.out.println("信用卡类用户余额为"+a.getBalance());//对象a可以调用父类中的方法getBalance().
	}

}

子类可以通过覆盖对父类中原有的方法进行修改,比如信用卡的取款与其父类的取款方法有所不同,就可以对父类方法进行覆盖,@Override为覆盖的标志。也可以定义新的变量和方法如变量lineOfCredit和方法findOverdraw。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值