Java面向对象三大基本特征之继承

继承是 Java 面向对象编程技术的一块基石,是面向对象的三大特征之一,也是实现软件复用的重要手段,继承可以理解为一个对象从另一个对象获取属性的过程。

一、继承的概念

1.概念:继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。

2.生活中体现出继承的示例:

兔子和羊属于食草动物类,狮子和豹属于食肉动物类。

食草动物和食肉动物又是属于动物类。

所以继承需要符合的关系是:is-a,父类更通用,子类更具体。

虽然食草动物和食肉动物都是属于动物,但是两者的属性和行为上有差别,所以子类会具有父类的一般特性也会具有自身的特性。

3.IS-A 关系

IS-A 就是说:一个对象是另一个对象的一个分类

二、继承的使用

1.在Java之中,如果要实现继承的关系,可以使用如下的语法:

在 Java 中通过 extends 关键字可以申明一个类是从另外一个类继承而来的,一般形式如下:

class 父类 {

}

class 子类 extends 父类 {

}

2.示例:

父类:Animal类

public class Animal{
	private String name;
	private int health;
	private int love;
	
	public Animal() {
	}

	public Animal(String name, int health, int love) {
		this.name = name;
		this.health = health;
		this.love = love;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getHealth() {
		return health;
	}

	public void setHealth(int health) {
		this.health = health;
	}

	public int getLove() {
		return love;
	}

	public void setLove(int love) {
		this.love = love;
	}
	
	 void print() {
		System.out.println("宠物信息:昵称:" + this.name + ",健康值:" + this.health
				+ ",亲密度:" + this.love);
	}
}

子类:Dog类

public class Dog extends Animal{

	// 品种
	private String strain;

	public Dog() {
	}

	public Dog(String name, int health, int love, String strain) {
		super(name, health, love);
		this.strain = strain;
	}

	public String getStrain() {
		return strain;
	}

	public void setStrain(String strain) {
		this.strain = strain;
	}
	
	
	
	public void print(){
//		System.out.println("宠物信息:昵称:" + this.getName() + ",健康值:" + this.getHealth()
//				+ ",亲密度:" + this.getLove()+",品种:"+this.strain);
		super.print();
		System.out.println("品种:"+this.strain);
	}

}

三、继承的必要性

1.提高了代码的复用性

继承是Java中实现代码重用的重要手段之一。子类继承父类后可以使用父类的方法,因此可以大大节省代码量。

2.提高了代码的可维护性

由上面的代码可知Animal类就可以作为一个父类,然后Dog类继承这个类之后,就具有父类当中的属性和方法,子类就不会存在重复的代码,维护性也提高,代码也更加简洁,提高代码的复用性(复用性主要是可以多次使用,不用再多次写同样的代码)。

四、继承的局限性

1.Java中只支持单根继承,即一个类只能有一个直接父类;Java之中只允许多层继承不允许多重继承,Java存在单继承局限

2.在一个子类继承的时候,实际上会继承父类之中的所有操作(属性、方法),但是需要注意的是,对于所有的非私有(no private )操作属于显式继承(可以直接利用对象操作),而所有的私有操作属于隐式继承(间接完成)。

3.在继承关系之中,如果要实例化子类对象,会默认先调用父类构造,为父类之中的属性初始化,之后再调用子类构造,为子类之中的属性初始化,即:默认情况下,子类会找到父类之中的无参构造方法。

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

豪仔思密达

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值