Java继承关系之富二代和他爹
首先需要知道继承的一些定义,简单讲下,但务必记住:
- 继承概念里有子类和父类,父类又称为超类或者基类,子类又称为派生类(别换了个词就傻住了)
- 继承是为了子类对象能拥有像父类一样的属性和方法(行为),子类也可以直接父类中非私有 (
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继承关系之富二代和他爹相关推荐
- java继承关系中,父类private修饰的内容真的不能被继承吗?NO
前情引入 关于java的继承,初学的时候,一直认为父类中private修饰的东西时无法被子类继承.后来随着学习的深入,见得多了一些,看到一些文章博客的另一种观点:其实父类中的东西,除了构造方法之外,其 ...
- Java继承关系中,父类不可以强制转换成子类
总结: 父类不可以强转为子类 父类中只存放共性抽象类方法,子类可以存放特性方法,所以子类 首先构建好两个类 构建继承类方法-点击查看 在Main中强制将父类转换为子类 Student a = (Stu ...
- Java继承关系的类的初始化和实例化的执行顺序
2019独角兽企业重金招聘Python工程师标准>>> 首先我们定义一个接口,如下: public interface People {String interfaceName = ...
- java继承 映射_hibernate继承关系映射和java反射机制的运用
转:http://blog.csdn.net/derpvailzhangfan/article/details/1957946 ,感谢博主分享 Notes:hibernate元数据的运用:uuid的概 ...
- java 继承先后顺序_Java中的继承关系的加载顺序
/* 在加载类时,Java虚拟机先加载父类再加载子类,再对静态初始化块. 静态成员变量(类变量).静态方法进行一次初始化. 只有调用new方法时才会创建类的对象.按照父子继承关系进行初始化, 首先执行 ...
- Java继承时构造函数的关系
Java继承时构造函数的关系,先来一道笔试题给大家看看: 在继承中,关于构造方法的说明,下列说法错误的是() A.子类无条件的继承父类的无参构造方法, B.子类可以引用父类中的有参构造方法,使用sup ...
- 在CMD窗口中使用javac和java命令进行编译和执行带有包名的具有继承关系的类
一.背景 最近在使用记事本编写带有包名并且有继承关系的java代码并运行时发现出现了很多错误,经过努力一一被解决,今天我们来看一下会遇见哪些问题,并给出解决办法. 二.测试过程 1.父类代码 1 pa ...
- Java反射-继承关系
目录 反射类型继承关系图 类 Type ParameterizedType TypeVariable WildcardType GenericArrayType Annotation Annotate ...
- Java面试题 20在面向对象编程里,经常使用is-a来说明对象之间的继承关系
Java面试题 20在面向对象编程里,经常使用is-a来说明对象之间的继承关系,下列对象中不具备继承关系的是?() A:手机与小米手机 B:企业家与雷军 C:编程语言与Java D:中国与北京 类之间 ...
最新文章
- 适用于 Python 的 10 大最佳 IDE,你 Pick 哪一款?
- Linux 刻录光盘
- 基本的SQL-SELECT语句
- linux培训笔记1
- 相机模型与标定(三)--张正友标定
- 编译自己功能定制的Fedora7内核
- linux备份系统iso,将Linux系统转换为ISO镜像文件以实现备份
- C++学习足迹---(纯DOS版)五子棋
- 学习笔记HHL:Generalizing a Person Retrieval Model--Hetero-Homogeneous Learning UDA郑良2018
- 用Python来实现2~7阶行列式的计算
- css 简单写出咸蛋超人
- Problem K. Road Network - ACPC2015(求树的直径 dp)
- 前端开发遇到 STATUS_BREAKPOINT
- Mysql 使用存储过程合并多个表数据
- kafka中的配额管理(限速)机制
- Springboot大学生健康报送系统的设计与实现毕业设计源码091005
- 国内主流比价网站测试分析报告
- linux 查看apk信息,linux 查看apk包名与类名
- 超级简便:公式居中编号右对齐方法
- 全奖博士招生,英国考文垂大学
热门文章
- 诸如(1234568) 0xFF这类
- COPU副主席刘澎:中国开源在局部领域已接近或达到世界先进水平
- 【风马一族_xml】xml语法
- python 概率分布模型_使用python的概率模型进行公司估值
- 直达号PK公众号的背后还有哪些市场空间?
- 教程篇(7.0) 04. FortiGate基础架构 二层交换 ❀ Fortinet 网络安全专家 NSE 4
- 使用wx原生方法扫描获取SN码
- html5学习笔记之十(微数据)
- EMC trainning杂谈
- 【Qt Quick】零基础入门系列之安装与卸载(一)