JAVA初学者笔记之理解继承

前言:身为刚刚接触java不久的我,将以初学者角度来介绍关于继承的概念,教学说不上,顶多算是学后分享以及总结。有任何说法不正确的,欢迎提出,也请多多包涵。

刚知道java时,就在网上看到了有关java的三大特性(封装、继承、多态),但仅仅只是理解(其实只是看懂了概念,不应用就没有真正理解),当逐渐学习之后,才明白继承的基本用法。

对于继承的理解:官方解释相比大家都已经看了很多了,不如我来讲个故事,以我对继承的理解来说说这个事:

很久很久以前,一个星球诞生了——地球。由于环境适宜,逐渐的,在这个荒芜的星球上多了一种可爱的单细胞生物A种族(Object类,所有类的祖先),这个种族有着能抵御极度温差的保护组织(属性,也就是类中的变量),长着可以移动的器官(属性,也就是类中的变量),会通过晒太阳来补充能量(行为,也就是类中的函数)。只不过每个个体(对象,实例化)间或多或少都是有些差异,有的保护组织是细胞壁,有的则是细胞膜;有的移动器官是鞭毛,有的是类似蹼的裙边。它们获取的能量也因为个体的不同而有所不同。

慢慢的,随着时间的流逝,多了一个新的物种B种族(Object类的子类),它并不是凭空出现的,是根据那个单细胞生物逐渐演化而来。它不仅有单细胞生物有的保护组织和移动器官(父类自带的属性),而且还多了能够融化其他单细胞细胞壁的消化器官(子类新加的属性)。它不仅能靠太阳提供能量,还能通过吞噬其他单细胞来获取能量(子类新加的行为)

正是因为有了这个B种族的存在,为了自保,A种族又分化出一个新的种族C种族(Object类的另一个子类,说明一个父类可以有多个子类),这个种类除了有着A种族的属性和行为,还长着可以抵御B种族消化器官的攻击器官(子类新加的与B类不同的属性)

就这样,生物不断演变进化,地球上的物种越来越多,最终形成了一个生态多样化的星球。

从这个故事中我们可以了解:

  1. 类、对象、类中变量(属性)与类中函数(行为)之间的关系。
  2. Object类是所有类的祖先类。
  3. 子类可以继承父类的所有变量及函数。
  4. 子类之所以为子类,正是因为多了父类没有的变量或函数。也就是说子类可以调用父类,但父类无法调用子类。
  5. 一个父类可以有多个子类(反之不能成立,java类中只支持单继承)。

当然,实验是检验真理的唯一标准,不能光靠讲故事来理解,更要通过代码来进行检验。

首先,建立一个ARace类(A种族)。

它的变量是race(种族类型)、protectiveTissue(保护组织)和mobileOrgans(移动器官),以及间接访问函数setget和函数getSunEnergy(能量获取方式:晒太阳)。

代码如下:

package pri.cat.studyextends;

//A种族,这里仅代表一个父类,与故事中的object类无关

public class ARace {

String race="A种族";

String protectiveTissue; //保护组织

String mobileOrgans;      //移动器官





public  void getSunEnergy() {

System.out.print("正在晒太阳\r\n");

}



}

再写一个调用ARace类的主函数:

package pri.cat.studyextends;



public class Demo02Extends {



public static void main(String[] args) {

// TODO 自动生成的方法存根

ARace a=new ARace();//对象实例化,一个叫a的生物,它是a种族的

a.protectiveTissue="细胞壁";//赋值,a的保护组织是细胞壁

a.mobileOrgans="鞭毛";//赋值,a的移动器官是鞭毛

System.out.print("这个生物是"+a.race+",它有着"+a.mobileOrgans+","+a.protectiveTissue+"\r\n");//生成生物档案

a.getSunEnergy();//a的行为,它正在干什么呢?



}



}

题外话:创建对象与赋值时,有种创世主的感觉有木有?

运行:

 

这样,一个名叫a的对象就诞生啦,下面创造一个进化后的b种族的对象。

还是先建一个BRace类,继承ARace的变量与方法,除此之外,还多了stomach(消化器官)和吞噬的行为:

package pri.cat.studyextends;



public class BRace extends ARace{

    String race="B种族";

    String stomach;

public void getARaceEnergy() {

System.out.print("正在吞噬A种族生物\r\n");



}

}

在主函数中,创建一个b种族对象:

package pri.cat.studyextends;



public class Demo02Extends {



public static void main(String[] args) {

// TODO 自动生成的方法存根

ARace a=new ARace();//对象实例化,一个叫a的生物,它是a种族的

a.protectiveTissue="细胞壁";//赋值,a的保护组织是细胞壁

a.mobileOrgans="鞭毛";//赋值,a的移动器官是鞭毛

System.out.print("这个生物是"+a.race+",它有着"+a.mobileOrgans+","+a.protectiveTissue+"\r\n");//生成生物档案

a.getSunEnergy();//a的行为,它正在干什么呢?



System.out.print("***********************\r\n");



BRace b= new BRace();//对象实例化,一个叫b的生物,它是b种族的

b.protectiveTissue="加强细胞壁";//赋值,b的保护组织是加强细胞壁

b.mobileOrgans="蹼型裙边";//赋值,b的移动器官是蹼型裙边

b.stomach="强大消化腔";//赋值,b的消化器官是强大消化腔

System.out.print("这个生物是"+b.race+",它有着"+b.mobileOrgans+","+b.protectiveTissue+","+b.stomach+"\r\n");//生成生物档案

b.getSunEnergy();//b的行为,它正在?

b.getARaceEnergy();//b的行为,它正在?





}



}

运行一下:

 

可以看到,在BRace类中,并没有写关于ARace的属性和方法,但是在创建对象打印运行后,仍然是保留ARace的特性的,这就是继承。

如果看到这里的你感觉好像懂了但又好像没懂,那么不如自己动手来创建一个C种族的对象:

CRace类

package pri.cat.studyextends;



public class CRace extends ARace{

    String race="C种族";

    String attackOrgans;





}

主函数:

package pri.cat.studyextends;



public class Demo02Extends {



public static void main(String[] args) {

// TODO 自动生成的方法存根

ARace a=new ARace();//对象实例化,一个叫a的生物,它是a种族的

a.protectiveTissue="细胞壁";//赋值,a的保护组织是细胞壁

a.mobileOrgans="鞭毛";//赋值,a的移动器官是鞭毛

System.out.print("这个生物是"+a.race+",它有着"+a.mobileOrgans+","+a.protectiveTissue+"\r\n");//生成生物档案

a.getSunEnergy();//a的行为,它正在干什么呢?



System.out.print("***********************\r\n");



BRace b= new BRace();//对象实例化,一个叫b的生物,它是b种族的

b.protectiveTissue="加强细胞壁";//赋值,b的保护组织是加强细胞壁

b.mobileOrgans="蹼型裙边";//赋值,b的移动器官是蹼型裙边

b.stomach="强大消化腔";//赋值,b的消化器官是强大消化腔

System.out.print("这个生物是"+b.race+",它有着"+b.mobileOrgans+","+b.protectiveTissue+","+b.stomach+"\r\n");//生成生物档案

b.getSunEnergy();//b的行为,它正在?

b.getARaceEnergy();//b的行为,它正在?



System.out.print("***********************\r\n");

CRace c=new CRace();//对象实例化,一个叫c的生物,它是c种族的

c.protectiveTissue="细胞壁";//赋值,c的保护组织是细胞壁

c.mobileOrgans="鞭毛";//赋值,c的移动器官是鞭毛

c.attackOrgans="尖刺";//赋值,c的攻击器官是尖刺

System.out.print("这个生物是"+c.race+",它有着"+c.mobileOrgans+","+c.protectiveTissue+","+c.attackOrgans+"\r\n");//生成生物档案

c.getSunEnergy();//c的行为,它正在干什么呢?







}



}

运行一下:

 

由此看来,CRace类是ARace类继承过来的,与Brace类一点关系都没有,b的独有属性与行为,c都没有。如果硬要说的话,b(子)与c(子)顶多算是兄弟,都有a(父)的特性。

也变相证明了,一个父类可以有多个子类。

主要内容就是这些啦,啰嗦了一堆,只是简单的将最基础的继承说明了一下,主要是想帮助大家(也帮助自己)从侧面理解继承。如果哪里比喻不对,或是有漏洞,欢迎大家补正,这个小故事也会持续更新,继续帮助大家理解java世界~

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值