继承的概念及其使用细节

继承

概念

当多个类中定义了相同的共性内容(相同的成员变量和成员方法)时,为了提高代码的复用性,就将这多个类中相同的共性内容抽取出来定义在一个独立的类中,然后再使用其它类去继承这个定义了相同的共性内容的独立的类,就继承了这独立类中所定义的相同的共性内容了,这就是继承。
定义了相同的共性内容的类称为父类(基类 超类),继承了父类的类称为子类。
子类继承父类的关系是使用关键字extends来表示的。

Java继承的限制

在java中继承关系只能是直接单继承,不能是直接多继承(一个子类不能同时继承多个父类):
1)因为如果一个子类能够同时继承多个父类,而这多个父类中存在同名 同参数的方法,那么子类对象在调用该名称的方法时存在不确定性,不能明确该去调用继承自哪个父类的该名称的方法了。
2) 如果一个子类能够同时继承多个父类,而这多个父类中存在同名 同参数的方法,那么就相当于在子类中隐藏存在同名 同参数的多个方法,而从方法重载的角度去看这是不被允许的。

虽然Java中不允许直接多继承,但是允许多重继承
(B继承A,C继承B — A是爷爷 B是父亲 C是儿子(孙子))。

class A
{
	public void show(){
	  System.out.println("A....show");
	}
}

class B extends A
{
	/*
	  public void show(){
	   System.out.println("A....show");
	  }
	*/
    
	/*
	  子类继承自父类的show()和子类自己的show()在子类中也不可能共存,
	  属于同一个方法;会是子类自己定义的show()覆盖了子类继承自父类的
	  show();
	*/	
	public void show(){
	  System.out.println("B....show");
	}
}

class C extends B
{
	/*
	  public void show(){
	   System.out.println("B....show");
	  }
	*/
}

继承的使用细节

1)继承子父类间成员变量的特点
1】父类中有的成员变量,子类中没有,子类使用继承自父类的
2】父类中没有的成员变量,子类中有,子类使用自己的
3】 当子父类中出现了相同的成员变量时,子类会依据就近访问原则,使用子类自己的
4】 当子父类中出现了相同的成员变量时,在子类中既想使用自己的该名称的成员变量,又想使用继承自父类的该名称的成员变量。直接变量 或 this.变量 都表示子类自己的该名称的成员变量,super.变量 表示子类继承自父类的该名称的成员变量。
2)继承子父类间成员方法的特点
1】父类中有的成员方法,子类中没有,子类使用继承自父类的
2】父类中没有的成员方法,子类中有,子类就使用自己的
3】当子父类间出现了相同的方法时,子类的成员方法会覆盖子类继承自父类的该成员方法,所以访问的是子类自己的。
4】当子父类间出现了相同的方法时,既想访问子类自己的该方法又想访问子类继承自父类的该方法,直接方法 或 this.方法 都表示子类自己的方法,super.方法 表示子类继承自父类的方法。
3)继承子父类间构造方法的特点
在子类所有构造器的第一句都默认隐藏存在一个super();,表示访问父类默认的无参构造器。

因为子类继承父类并不是通过关键字extends,关键字extends仅仅是表示子父类的继承关系子类继承父类底层靠的是在子类所有构造器中通过访问父类构造器来实现的,因为构造器是用于初始化对象的,子类通过访问父类构造器就能明确父类中有哪些内容能被继承了;

除了在子类构造器中通过默认隐藏super(),也能通过带参的super(参数列表),我们去指定访问具体的父类构造器;总之只要在子类的构造器中能够把父类的构造器访问了,就能实现子类对父类的继承。
父类的私有成员变量子类可以继承但是不能直接继承
1】使用子类继承自父类为其私有属性提供的set/get方法去访问

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值