Java零基础_学Java必备的学习笔记(十六)Java继承定义及使用

这是我参与8月更文挑战的第7天,活动详情查看:8月更文挑战java

上篇说到Java-static关键字(下) 今天咱们开始学习有关Java继承的知识。markdown

本篇文章主要内容:

  1. 了解继承在java中有什么做用
  2. 继承的优缺点
  3. 在代码上如何实现继承

Java继承定义

继承是面向对象三大特征之一,封装居首位,封装以后造成了独立体,独立体A和独立体B之间可能存在继承关系。其实程序中的继承灵感来自于现实生活,在现实生活中继承到处可见,例如,儿子继承了父亲的财产,儿子不须要努力就颇有钱。post

生活中的继承:

图1:现实世界中的继承学习

继承时子类继承父类的特征和行为,使得子类对象(实例)具备父类的属性,或子类从父类继承方法,使得子类具备与父类相同的行为。兔子和羊属于食草动物类,狮子和豹属于食肉动物类。食草动物和食肉动物又是属于动物类。因此继承须要符合的关系是:is-a(Bird is-a Animal),父类更通用,子类更具体。虽然食草动物和食肉动物都是属于动物,可是二者的属性和行为上有差异,因此子类会具备父类的通常特性也会具备自身的特性。测试

为何要使用继承机制?在不一样的类中也可能会有共同的特征和动做,能够把这些共同的特征和动做放在一个类中,让其它类共享。所以能够定义一个通用类,而后将其扩展为其它多个特定类,这些特定类继承通用类中的特征和动做。继承是 Java 中实现软件重用的重要手段,避免重复,易于维护。this

Java如何继承

java中继承的语法格式:spa

class 类名 extends 父类名{

类体;

}
复制代码

为何须要继承,接下来咱们用如下这个需求来讲明一下:code

public class Account { //银行帐户类
	//帐号
	private String actno;
	//余额
	private double balance;
	//帐号和余额的set和get方法
	public String getActno() {
		return actno;
	}
	public void setActno(String actno) {
		this.actno = actno;
	}
	public double getBalance() {
		return balance;
	}
	public void setBalance(double balance) {
		this.balance = balance;
	}
}
复制代码
public class CreditAccount { //信用帐户类
	//帐号
	private String actno;
	//余额
	private double balance;
	//帐号和余额的set和get方法
	public String getActno() {
		return actno;
	}
	public void setActno(String actno) {
		this.actno = actno;
	}
	public double getBalance() {
		return balance;
	}
	public void setBalance(double balance) {
		this.balance = balance;
	}
	//信誉度(特有属性)
	private double credit;
	//信誉度的set和get方法
	public double getCredit() {
		return credit;
	}
	public void setCredit(double credit) {
		this.credit = credit;
	}
}
复制代码

以上两个类分别描述了“银行帐户类”和“信用帐户类”,信用帐户类除了具备银行帐户类的特征以外还有本身的特性,按照以上代码的编写方式,程序将会很是的臃肿,咱们将上面的程序修改成继承方式,请看代码:orm

public class Account { //银行帐户类
	//帐号
	private String actno;
	//余额
	private double balance;
	//帐号和余额的set和get方法
	public String getActno() {
		return actno;
	}
	public void setActno(String actno) {
		this.actno = actno;
	}
	public double getBalance() {
		return balance;
	}
	public void setBalance(double balance) {
		this.balance = balance;
	}
}
复制代码
public class CreditAccount extends Account{ //信用帐户类
	//信誉度(特有属性)
	private double credit;
	//信誉度的set和get方法
	public double getCredit() {
		return credit;
	}
	public void setCredit(double credit) {
		this.credit = credit;
	}
}
复制代码
public class AccountTest {
	public static void main(String[] args) {
		CreditAccount act = new CreditAccount();
		act.setActno("111111111");
		act.setBalance(9000.0);
		System.out.println(act.getActno() + "信用帐户,余额" + act.getBalance() + "元");
	}
}
复制代码

运行结果以下图所示:对象

图2:继承测试

经过以上的代码,咱们能够看到继承是能够解决代码臃肿问题的,换句话说,继承解决了代码复用的问题,但这其实并非继承最重要的做用,继承最重要的做用是:有了继承才有了方法覆盖和多态(后续的课程中详细讲解)

继承有哪些特性呢?如下内容须要记忆:

● B类继承A类,则称A类为超类(superclass)、父类、基类,B类则称为子类(subclass)、派生类、扩展类。

● java中的继承只支持单继承,不支持多继承,C++中支持多继承,这也是java体现简单性的一点,换句话说,java中不容许这样写代码:class B extends A,C{ }。

● 虽然java中不支持多继承,但有的时候会产生间接继承的效果,例如:class C extends B,class B extends A,也就是说,C直接继承B,其实C还间接继承A。

● java中规定,子类继承父类,除构造方法和被private修饰的数据不能继承外,剩下均可以继承。

● java中的类没有显示的继承任何类,则默认继承Object类,Object类是java语言提供的根类(老祖宗类),也就是说,一个对象与生俱来就有Object类型中全部的特征。

● 继承也存在一些缺点,例如:CreditAccount类继承Account类会致使它们之间的耦合度很是高,Account类发生改变以后会立刻影响到CreditAccount类。

接下来咱们来测试一下从Object类中继承过来的方法,先来看一下Object类的部分源代码:

图3:Object类中toString()方法源代码

咱们来尝试调用这个方法,请看代码以及执行结果:

public class ExtendsTest{
	public static void main(String[] args) {
		ExtendsTest et = new ExtendsTest();
		String s = et.toString();
		System.out.println(s);
	}
}
复制代码

运行结果以下图所示:

图4:toString()方法执行结果

虽然输出结果看不懂,可是起码看到这个字符串当中确实是有一个“@”符号的,toString()方法确实被ExtendsTest类继承过来了。

相关文章
相关标签/搜索