类的继承与super()的意义以即如何写一个正确的异常类
这些东西都是我看了许多名师课程和自己研究的成果,严禁转载,这里指出了如何正确的自己定义一个异常类并看一看sun写的java的源代码
话题一:子类的构造器执行是否一定会伴随着父类的构造执行?
1.this()与super()不能共存
2.如果不显示地调用this()和super();子类对象的创建是否一定执行父类的构造
3.既然super()和this()不能共存,又说子类的构造执行一定会执行父类的构造,那么我让子类的构造执行this()是不是就不能在执行父类的构造?
4.如果我非不让父类的构造执行,我通过子类无参的去调用有参的this(int age);然后有参的去调用无参的this()现在系统就无法调用
super()了吧但是!!!直接报错
总结子类的构造只要被执行,一定伴随着父类的构造的执行
话题二:为什么要设计子类的构造一定伴随父类的被动构造执行
1.首先,我们回到构造的定义:创建对象,并给类成员初始提供手段这就是构造的作用。那么子类调用父类构造有什么作用?
答案:子类中包含从父类中继承的成员,我们这里就理解为每一个子类对象中,包含一个父类型的对象,我们可以通过super()来给子类中父类型的对象初始化,这可以提高代码的重用。
但是这样意义还是不大啊:我不在乎这点代码片段
那么我举一个实例,如果父类中的成员是私有的,你只能通过super()来给私有的成员赋值,那么为什么要给父类的私有成员赋值成员
这里有一个实例:
可以看到我自己写的一个异常:被编译器抛出来了。并用抛出的写的错误提示,显示MyException(我写的)从它的父类Exception(系统写的)中继承了
这个字段,用于存放”年龄非法“这个字符串,但是它在父类中是私有的,你只能通过这个方法来给它赋值
显然你给的错误提示根本没有被编译器抛出。具体,要看java写的源代码
显然只有对父类中的那个私有的字段赋值,你写的一个参的异常类构造才有意义
首先我们只看父类的一个参数的构造(因为我只调用了它),进入Exception只找一个参数的构造
可见Exception又调用了它父类的构造
没有在调用super();了所以已经到顶层了,显然你写了那个”年龄非法“最后存到detaiLMessage中去了。
看一下它的定义
果然是私有的,父类中私有的东西子类无法直接访问,显然只能通过调用super();java中的Exception自己也是这么做的
类的继承与super()的意义以即如何写一个正确的异常类的更多相关文章
- 关于Python中的类普通继承与super函数继承
关于Python中的类普通继承与super函数继承 1.super只能用于新式类 2.多重继承super可以保公共父类仅被执行一次 一.首先看下普通继承的写法 二.再看看super继承的写法 参考链接 ...
- Java面向对象-Java类的继承及super关键字
Java面向对象-Java类的继承 1,继承定义以及基本使用 定义:子类能够继承父类的属性和方法: 注意点:Java中只支持单继承: 私有方法不能继承: 上代码: package com.java12 ...
- python写一个密码生成器的类,要求有个类变量,统计一下一共生成过多少个密码。 要求有4个方法,1:构造方法 2 实例方法 3 类方法 4 静态方法
生成指定长度的随机数字密码 生成指定长度的随机字母密码 生成指定长度的随机数字和字母的混合 #encoding=utf-8 import random import string class pa ...
- Java实验1 - 类的继承(super)- 创建checkaccount继承account
笔记总结: /** 任务81: 继承性,(降低代码亢余度) * 1.class 子类A Extends 父类B,(private 的内容无法被继承) * 2. 方法可以覆盖(Overrides), 注 ...
- day24类的继承
类的继承1 什么是继承 继承一种新建类的方式,新建的类称之为子类/派生类,被继承的类称之为父类\基类\超类 python中继承的特点: 1. 子类可以遗传/重用父类的属性 ...
- Python的程序结构[2] -> 类/Class[1] -> 基类与继承
基类与继承 / Base Class and Inheritance Class 面向对象的特性使得 Python 中不可避免地需要使用到类和类的继承,类的继承可以使得代码很好的被重用.下面以一些代码 ...
- php类的继承(基本概念,访问权限修饰符,重写override)
类的继承 简单理解: 某个类A具有某些特征,另一个类B,也具有A类的所有特征,并且还可能具有自己的更多的一些特征,此时,我们就可以实现:B类使用A的特征信息并继续添加自己的一些特有特征信息. 基本概念 ...
- Python3 面向对象-类的继承与派生
1.什么是继承? 继承是一种创建新类的方式,新建的类可以继承一个或多个父类(python支持多继承),父类可称为基类或超类,新建的类称为派生类和或子类. 子类会遗传父类的属性,从而解决代码重用问题. ...
- Python的类和继承
一.类的封装: 封装将类的信息隐藏在类内部,不允许外部直接修改该类的变量,只能通过该类提供的方法来实现对隐藏信息的操作和访问 class Boss(): # 类的公共属性 level=1 # 类的初始 ...
随机推荐
- [转]【技术心得】Last-Modified,Etag,Expire区别
Last-Modified 是什么 Last-Modified 是 HttpHeader 中的资源的最后修改时间,如果带有 Last-Modified ,下一次发送 Http 请求时,将会发生带 If ...
- DCOS安装
安装pre-flight master机器会安装上安装文件(同时check条件是否满足要求),其他的agent设备只是check各种条件是否具备. 确保53/2181端口没有被占用:centos7每次 ...
- C++动多态和静多态
动多态的设计思想:对于相关的对象类型,确定它们之间的一个共同功能集,然后在基类中,把这些共同的功能声明为多个公共的虚函数接口.各个子类重写这些虚函数,以完成具体的功能.客户端的代码(操作函数)通过指向 ...
- linux 内存释放命令
我使用的是CentOS 6.5 ,由于卸载Solr 后发现内存占用挺多的,我想释放一下内存,就查阅了一些资料,分享给大家: 1.free -m 查看内存的使用情况,-m表示单位是兆 2.echo 1 ...
- uboot - *** Warning - bad CRC, using default environment
出现这个现象的原因 环境变量存储区没有相应的数据,产生的原因可能是: 1.首次烧写uboot启动,,出现这个提示,执行saveenv 指令保存环境变量即可: 2.nor fash芯片的 基地址出错. ...
- (转)C# -- 扩展方法的应用(Extension Methods)
本文转载自:http://blog.csdn.net/zxz414644665/article/details/9793205 当你有下面这样一个需求的时候,扩展方法就会起到作用:在项目中,类A需要添 ...
- java中i/o练习
总结: FileInputStream fis; int length; while((length=fis.read(b,0,b.length))!=-1){ output.write(b,0,le ...
- Dubbo各种协议详解
(1)协议支持 Dubbo支持多种协议,如下所示: Dubbo协议 Hessian协议 HTTP协议 RMI协议 WebService协议 Thrift协议 Memcached协议 Redis协议 在 ...
- MessageBox如何输出整数
int cx=10;CString s;s.Format(_T("整数是:%d"),cx);MessageBox(s);
- WebRTC的拥塞控制技术<转>
转载地址:http://www.jianshu.com/p/9061b6d0a901 1. 概述 对于共享网络资源的各类应用来说,拥塞控制技术的使用有利于提高带宽利用率,同时也使得终端用户在使用网络时 ...