首先需要知道继承的一些定义,简单讲下,但务必记住:

  • 继承概念里有子类和父类,父类又称为超类或者基类,子类又称为派生类(别换了个词就傻住了)
  • 继承是为了子类对象能拥有像父类一样的属性和方法(行为),子类也可以直接父类中非私有 ( public / protect )的属性和方法(行为)
  • 只能单继承 extends ,不能做多继承(接口 implements 可以做多实现)

上面提到了继承是为了父类的属性和方法,那么我们接下来重点就讲讲这块,为了让文章更有趣点,我会在下面例子中引入财产赚钱方法两个概念:财产=》属性、赚钱方法=》行为

有钱爹和他的富二代儿子

有这么一个有钱爹

/*** @author :炜哥* @description:TODO 一个有钱有赚钱门路的爹* @date :2021/4/21 14:05*/
public class RichFather {//构造器public RichFather() {System.out.println("富一代爸爸我出生了");}//爸爸我有1000万现金protected int money = 10000000;protected void makemoney(){money += 100000;System.out.println("这是爸爸的赚钱方法");}
}

ok,富二代来了

/*** @author :炜哥* @description:TODO 富二代* @date :2021/4/21 14:09*/
public class RichSecondGeneration extends RichFather{//无参构造器public RichSecondGeneration() {//子类的构造方法中默认会在第一句代码中添加super(),表示调用父类的构造方法//父类成员变量初始化后,才可以给子类使用//super(); System.out.println("富二代出生了");//super(); //只能是在第一句代码中,放在这里是不行的}//一万块零花钱public int money = 10000;public void consume(int consume_money) {System.out.println("我在夜场消费,花了" + consume_money + "元");money -= consume_money;System.out.println("我的钱还剩" + money);System.out.println("爸爸的钱还剩" + super.money);}
}

亲爹只能有一个(只能单继承extends)

谁亲爹能是多个的?

谁先出生(创建对象时,构造函数执行顺序)

 public static void main(String[] args) {//富二代出生RichSecondGeneration richSecondGeneration = new RichSecondGeneration();}

爸爸都没出生,儿子你怎么出来?

富一代爸爸我出生了
富二代出生了

但如果爸爸是叼着钱(比喻的我自己都有点想笑)出生的, RichFather 类的构造器变成:

//构造器
public RichFather(int money) {System.out.println("富一代爸爸我出生了,嘴里叼着" + money);
}

那么富二代出生的时候就要声明他爸不是正常出生方式 super (无参构造函数)了,谁出生叼个钱啊:

//构造器
public RichSecondGeneration() {super(50);//如果父类没有无参构造函数,那么子类在初始化对象时必须要加有参super声明System.out.println("富二代出生了");
}

富一代爸爸我出生了,嘴里叼着50
富二代出生了

其实上面的比喻也不太贴切,父类的有参构造和无参构造函数有同时存在的情况,这种情况也不需要 super 声明,即只要父类存在无参构造就不需要 super 声明

花了谁的钱(成员变量重名)

爹和富二代儿子都有钱 money ,如果去消费到底会消费谁的?测一波

//测试方法
public static void main(String[] args) {RichSecondGeneration richSecondGeneration = new RichSecondGeneration();//富二代消费richSecondGeneration.consume(4000);}

结果:

我在夜场消费,花了10000元
我的钱还剩6000
爸爸的钱还剩10000000

这个money花的是富二代自己的钱( this ),为啥,因为儿子你没去拿爸爸的钱呀( super ):

public void consume() {System.out.println("我在夜场消费超标" + consume_money + ",只能把老爸的钱偷过来花了");super.money -= consume_money;System.out.println("我的钱还剩" + money);System.out.println("爸爸的钱还剩" + super.money);
}

我在夜场消费超标4000,只能把老爸的钱偷过来花了
我的钱还剩10000
爸爸的钱还剩9996000

钱藏起来了怎么拿(如何获取父类的私有成员变量)

他爸一看不对啊,这小逼崽子胆肥了呀,不行,得把钱藏起来

//爸爸我有1000万现金,但现在钱要藏起来了
private int money = 10000000;//protect设置为private

这个时候,儿子他想偷是偷( super)不过来了,怎么办,他想到了通过他妈(父类的公共方法),于是在 RichFather 类中增加两个方法:

//在爸爸的世界里,妈妈拿钱是天经地义的
public void consumeMoneyByMonther(int consumeMoney) {this.money -= consumeMoney;System.out.println("妈妈拿走了" + consumeMoney);
}//让妈妈看看爸爸还剩多少钱
public int getMoney() {return this.money;
}

龟儿子手段升级,消费方式consume() 再次更新:

public void consume(int consume_money) {//手段升级,通过妈妈拿钱System.out.println("我在夜场消费超标" + consume_money + ",老爸的钱藏起来,怎么办?");consumeMoneyByMonther(consume_money);System.out.println("我的钱还剩" + money);System.out.println("爸爸的钱还剩" + super.getMoney());
}

我在夜场消费超标4000,老爸的钱藏起来,怎么办?
妈妈拿走了4000
我的钱还剩10000
爸爸的钱还剩9996000

算了,还是教儿子赚钱吧(成员方法继承)

爸爸觉得这样下去不是个办法,只能让儿子去赚钱 makemoney() ,否则要坐吃山空了:

//富二代洗心革面,开始赚钱
richSecondGeneration.makemoney();
System.out.println("我的钱还剩" + richSecondGeneration.money);
System.out.println("爸爸的钱还剩" + richSecondGeneration.getMoney());

这是爹爹的赚钱方法
我的钱还剩10000
爸爸的钱还剩10100000

所以整了半天,儿子发现自己上当了,赚钱 makemoney() 是在给爸爸赚,不行,我要把爸爸的赚钱门路归为自己所有(重写父类方法@Override),在富二代 RichSecondGeneration 类中新增方法

@Override
public void makemoney (){System.out.println("这是富二代的赚钱方法");this.money += 5000;//每个月赚的不多
}

这是富二代的赚钱方法
我的钱还剩15000
爸爸的钱还剩10000000

而且富二代出息了,还能顺便帮爸爸管理着赚钱

@Override
public void makemoney (){System.out.println("这是富二代的赚钱方法");this.money += 5000;//每个月赚的不多super.makemoney();//顺便帮爸爸管理着赚钱
}

这是富二代的赚钱方法
这是爹爹的赚钱方法
我的钱还剩15000
爸爸的钱还剩10100000

居然后还能花式赚钱(**重载),新增 makemoney 方法,不同的是需要传入参数

public void makemoney(String cannel){System.out.println("这是富二代的赚钱方法");System.out.println("在" + "渠道上赚钱");this.money += 1000;//每个月其他渠道赚的钱
}
//花式赚钱
richSecondGeneration.makemoney("拼多多");

这是富二代的赚钱方法
在拼多多渠道上赚钱

父慈子孝,皆大欢喜

此外还有一些不太好比喻的规范,就在这边直接讲了:

  • 子类方法覆盖父类方法时,必须要保证子类权限 >= 父类权限
  • 方法重写时,子类的返回值类型必须要 <= 父类的返回值类型

Java继承关系之富二代和他爹相关推荐

  1. java继承关系中,父类private修饰的内容真的不能被继承吗?NO

    前情引入 关于java的继承,初学的时候,一直认为父类中private修饰的东西时无法被子类继承.后来随着学习的深入,见得多了一些,看到一些文章博客的另一种观点:其实父类中的东西,除了构造方法之外,其 ...

  2. Java继承关系中,父类不可以强制转换成子类

    总结: 父类不可以强转为子类 父类中只存放共性抽象类方法,子类可以存放特性方法,所以子类 首先构建好两个类 构建继承类方法-点击查看 在Main中强制将父类转换为子类 Student a = (Stu ...

  3. Java继承关系的类的初始化和实例化的执行顺序

    2019独角兽企业重金招聘Python工程师标准>>> 首先我们定义一个接口,如下: public interface People {String interfaceName = ...

  4. java继承 映射_hibernate继承关系映射和java反射机制的运用

    转:http://blog.csdn.net/derpvailzhangfan/article/details/1957946 ,感谢博主分享 Notes:hibernate元数据的运用:uuid的概 ...

  5. java 继承先后顺序_Java中的继承关系的加载顺序

    /* 在加载类时,Java虚拟机先加载父类再加载子类,再对静态初始化块. 静态成员变量(类变量).静态方法进行一次初始化. 只有调用new方法时才会创建类的对象.按照父子继承关系进行初始化, 首先执行 ...

  6. Java继承时构造函数的关系

    Java继承时构造函数的关系,先来一道笔试题给大家看看: 在继承中,关于构造方法的说明,下列说法错误的是() A.子类无条件的继承父类的无参构造方法, B.子类可以引用父类中的有参构造方法,使用sup ...

  7. 在CMD窗口中使用javac和java命令进行编译和执行带有包名的具有继承关系的类

    一.背景 最近在使用记事本编写带有包名并且有继承关系的java代码并运行时发现出现了很多错误,经过努力一一被解决,今天我们来看一下会遇见哪些问题,并给出解决办法. 二.测试过程 1.父类代码 1 pa ...

  8. Java反射-继承关系

    目录 反射类型继承关系图 类 Type ParameterizedType TypeVariable WildcardType GenericArrayType Annotation Annotate ...

  9. Java面试题 20在面向对象编程里,经常使用is-a来说明对象之间的继承关系

    Java面试题 20在面向对象编程里,经常使用is-a来说明对象之间的继承关系,下列对象中不具备继承关系的是?() A:手机与小米手机 B:企业家与雷军 C:编程语言与Java D:中国与北京 类之间 ...

最新文章

  1. 适用于 Python 的 10 大最佳 IDE,你 Pick 哪一款?
  2. Linux 刻录光盘
  3. 基本的SQL-SELECT语句
  4. linux培训笔记1
  5. 相机模型与标定(三)--张正友标定
  6. 编译自己功能定制的Fedora7内核
  7. linux备份系统iso,将Linux系统转换为ISO镜像文件以实现备份
  8. C++学习足迹---(纯DOS版)五子棋
  9. 学习笔记HHL:Generalizing a Person Retrieval Model--Hetero-Homogeneous Learning UDA郑良2018
  10. 用Python来实现2~7阶行列式的计算
  11. css 简单写出咸蛋超人
  12. Problem K. Road Network - ACPC2015(求树的直径 dp)
  13. 前端开发遇到 STATUS_BREAKPOINT
  14. Mysql 使用存储过程合并多个表数据
  15. kafka中的配额管理(限速)机制
  16. Springboot大学生健康报送系统的设计与实现毕业设计源码091005
  17. 国内主流比价网站测试分析报告
  18. linux 查看apk信息,linux 查看apk包名与类名
  19. 超级简便:公式居中编号右对齐方法
  20. 全奖博士招生,英国考文垂大学

热门文章

  1. 诸如(1234568) 0xFF这类
  2. COPU副主席刘澎:中国开源在局部领域已接近或达到世界先进水平
  3. 【风马一族_xml】xml语法
  4. python 概率分布模型_使用python的概率模型进行公司估值
  5. 直达号PK公众号的背后还有哪些市场空间?
  6. 教程篇(7.0) 04. FortiGate基础架构 二层交换 ❀ Fortinet 网络安全专家 NSE 4
  7. 使用wx原生方法扫描获取SN码
  8. html5学习笔记之十(微数据)
  9. EMC trainning杂谈
  10. 【Qt Quick】零基础入门系列之安装与卸载(一)