四月十九号java基础知识
1.总括:类的继承是使用已有的类为基础派生出新的类。通过类继承的方式,便能开发出
新的类,而不需要编写相同的程序代码,所以说类的继承是程序代码再利用的概念
抽象与接口都是类概念的扩展。通过继承扩展出的子类,加上覆盖的应用,抽象类可以
一次创建并控制多个子类。接口则是JAVA语言里面实现多重继承的重要方法
2.类的声明通过extends关键字创建一个类的子类格式:
class Subclass extends Superclass{
.
.
.}
上述对象把Subclass声明为类Superclass的直接子类,如果Superclass又是某个类的子类,
则Subclass同时是该类的间接子类
3.子类的每个对象也都是其父类的对象,这是继承性的“即是”性质。也就是说Subclass
继承Superclass,则subclass即是Superclass,所以任何可以使用Superclass实例的地方
都允许使用Subclass实例,反之,则不然,父类对象不一定是它子类的对象
4.说明:
1)通过extends关键字,可将父类中的非私有成员继承给子类。
2)在java语言的继承中,执行子类的构造方法之前,会先调用父类中没有参数
的构造方法,其目的是为了要帮助继承自父类的成员做初始化操作
3)在严格意义上说,构造方法是不能被继承的,例如父类person有一个构造方法
person(String,int),不能说子类student也自动有一个构造方法Person(String,int)
但这并不意味着不能调用父的构造方法
5.调用父类中特定的构造方法:
如果父类中有多个构造方法时,如何才能调用父类中特定的构造方法呢?
做法就是在子类中通过super()语句调用父类特定的构造方法
6说明:
1).不管省略不省略子类有参构造中的super语句,则父类中的无参构造方法还会被调用
2).调用父类构造方法的super()语句必须写在子类构造方法中的第一行,否则编译会出现错误
3).在子类访问父类的构造方法,其格式为super(参数列表)。super可以重载,也就是说super
()会根据参数的个数和类型,执行父类相应的构造方法
4.Java程序中在执行子类的构造方法之前,如果没有用super()来调用父类中特定的构造方法
,则会先调用父类中没有参数的构造方法。因此在父类中只定义了有参数的构造方法 ,而在
子类的构造方法中有没有用super()来调用父类中特定的构造方法,则编译时会发生错误
有因为父类中找不到“没有参数的构造方法”可供执行。解决的办法是在父类中加上一个
“不做事”且没有参数的构造方法即可。如public Person(){}
5)super()与this()的功能相似,但super()是从子类的构造方法调用父类的构造方法,而this
()则是在同一个类内调用其他的构造方法。当构造方法有重载时,super()与this()均会根据
所给出的参数类型和个数,正确地执行相对应的构造方法
6).super()与this()均必须放在构造方法内的第一行,也就是这个原因,super()与this()无法同时
存在同一个构造方法内
7)与this关键字一样,super指的也是对象,所以super 同样不能在static环境中使用,包括
静态方法和静态初始化器(static语句块)
7.在子类中访问父类的成员:
在子类中使用super()不但可以访问父类的构造方法,还可以访问父类的成员变量和成员方法
但super不能访问子类添加的成员。在子类中访问父类的成员和方法的格式:
super.变量名
super.方法名
8.用Protected修饰的成员可以被该类自身,与它在同一个包中的其他类,在其他包中的该类的子类
三种类所引用。将成员声明为protected的最大好处就是可以同时兼顾安全性与便利性。
因为它只能供父类与子类或同一包中的类来访问 ,而其他类无法访问它
9.覆盖:覆盖与重载同属于多态,覆盖则是指子类中定义定义名称,参数个数与类型均与
父类中完全相同的方法,用以重写父类中同名方法的功能
10.覆盖父类的方法:
在子类定义父类已有的方法时,应保持与父类中完全相同的 方法头声明,即应与父类中
被覆盖的方法有完全相同的方法名、返回值类型和参数列表,否则就不是方法的覆盖
而在子类定义自己的与父类无关的方法,父类的方法未被覆盖,所以依然存在
也就是说子类继承父类所有被访问的成员方法时,如果子类的方法头与父类中的方法头
完全相同,则不能继承,此时子类的方法是覆盖的方法
11.子类中不能覆盖父类中声明为final或static的方法
12.注意:通过父类的对象访问子类的成员只限于“覆盖”的情况发生于。
也就是说父类与子类的方法名称、参数个数与类型必须完全相同,才可通过父类的对象
调用子类的方法。
13.创建父类类型的的变量指向子类对象。例如Person per = new Student("张三",23,"电子");
1)即将子类对象赋值给父类类型的变量,这种技术称为“向上转型”
2)由于向上转型是将子类的对象看作是父类对象,是从一个具体的类到一个较抽象的类,
所以它是安全的
3)“向下转换”就是将将抽象的类转换为比较具体的类。例如
Person per;
Student stu = new Person("张三",23,"电子");
4)当在程序中使用向下转换时,必须使用显性类型转换
总结:今天一天收获了跟类的继承相关的知识点,子类继承父类extends关键字连接
如果在父类中有无参构造,那么子类中继承不会报错
如果父类中没有无参构造,有有参构造 ,那么子类必须有与父类相关的有参构造
子类调用父类成员变量通过super语句,并且super语句必须放在子类构造方法的第一行
子类中访问父类成员变量和方法
super.name
super.setPerson
在子类中定义了与父类相同的的方法名,返回值以及参数列表时,子类的方法
会覆盖父类的方法
四月十九号java基础知识的更多相关文章
- 十九、Java基础--------IO流之字节流
在上一篇文章中介绍了IO体系以及一些基本概念和字符流的相关应用,本文着重介绍字节流的相关操作. 字节流 它的操作与字符流类似,可以参与字符流的定义.读取.写入.处理异常的格式,只不过是处理的数据不同, ...
- 第二十九节:Java基础知识-类,多态,Object,数组和字符串
前言 Java基础知识-类,多态,Object,数组和字符串,回顾,继承,类的多态性,多态,向上转型和向下转型,Object,数组,多维数组,字符串,字符串比较. 回顾 类的定义格式: [类的修饰符] ...
- java基础知识文章汇总
将之前的所有关于Java基础知识的随笔,整理成质量较高的十几篇随笔,几乎是好几篇比较零散的随笔合成现在的一篇,自认为还不错. java基础(一) 深入解析基本类型 java基础(二) 自增自减与贪心规 ...
- Java基础知识陷阱系列
Java基础知识陷阱系列 今天抽空把Java基础知识陷阱有关的文章汇总于此,便于大家查看. Java基础知识陷阱(一) Java基础知识陷阱(二) Java基础知识陷阱(三) Java基础知识陷阱(四 ...
- java基础知识小总结【转】
java基础知识小总结 在一个独立的原始程序里,只能有一个 public 类,却可以有许多 non-public 类.此外,若是在一个 Java 程序中没有一个类是 public,那么该 Java 程 ...
- Java 基础知识总结
作者QQ:1095737364 QQ群:123300273 欢迎加入! 1.数据类型: 数据类型:1>.基本数据类型:1).数值型: 1}.整型类型(byte 8位 (by ...
- Java基础知识总结(超级经典)
Java基础知识总结(超级经典) 写代码: 1,明确需求.我要做什么? 2,分析思路.我要怎么做?1,2,3. 3,确定步骤.每一个思路部分用到哪些语句,方法,和对象. 4,代码实现.用具体的java ...
- 毕向东—Java基础知识总结(超级经典)
Java基础知识总结(超级经典) 写代码: 1,明确需求.我要做什么? 2,分析思路.我要怎么做?1,2,3. 3,确定步骤.每一个思路部分用到哪些语句,方法,和对象. 4,代码实现.用具体的java ...
- Java 基础知识总结1
作者QQ:1095737364 QQ群:123300273 欢迎加入! 1.数据类型: 数据类型:1>.基本数据类型:1).数值型: 1}.整型类型(byte 8位 (by ...
- java基础知识小小结
java基础知识小总结 在一个独立的原始程序里,只能有一个 public 类,却可以有许多 non-public 类.此外,若是在一个 Java 程序中没有一个类是 public,那么该 Java 程 ...
随机推荐
- asm 理解
stm32中有3条总线:地址总线,数据总线,系统总线:地址总线上是地址值,数据总线上是数据值,cpu读写时会先在地址总线上传输地址值,如果是写操作之后数据总线上会放往前面地址处写入的数据值,如果是读操 ...
- git的基础指令练习
#版本回退 git reset commitId --hard
- new一个实例的原理及过程
前提,要明白new出来的实例是什么,包含了哪些内容? 请看一下举例代码↓↓↓↓ function Person(name,age){ this.name = name; this.age = age; ...
- rust-must-know-crates-5ad8 100DayOfRust
https://dev.to/cad97/rust-must-know-crates-5ad8 https://dev.to/search?q=100DayOfRust https://fastert ...
- npm proxy问题
检查你的电脑是否需要配置代理,如果不需要可以将代理禁用: npm config set proxy false 如果是需要配置代理服务的: 开启代理 npm config set proxy true ...
- 试题管理/在线课程/模拟考试/能力评估报告/艾思在线考试系统www.aisisoft.cn
艾思软件发布在线考试系统, 可独立部署, 欢迎咨询索要测试账号 一. 主要特点: ThinkPHP前后端分离框式开发 主要功能有: 在线视频课程, 模拟考试, 在线考试, 能力评估报告, 考试历史错题 ...
- cerebro简单使用 , ES界面化工具 , 网页查看 , 操作索引
下载安装 下载地址 https://github.com/lmenezes/cerebro/releases 解压即用 , 目录中不能有空格和中文 需要jdk11及以上(实际我本机只有jdk8也能用) ...
- Windows 10 输入法(仅桌面) %100 解决
大家好,今天我遇到了一件非常难受的一件事,那就是 WIndows 自带的输入发问题,无法输入中文!!! 这时我去网上找找解决方案,总结了一下几个: 文件检查 步骤 以管理员身份运行PowerShell ...
- 转发:基于Lerna打造多包管理最佳实践之道
最近在看vue-cli的源码部分,注意到这一个仓库下维护了多个package,很好奇他是如何在一个repo中管理这些package的. 我们组现在也在使用组件库的方式维护项目间共用的业务代码.有两个组 ...
- vs2022和wsl2开发和调试c++代码(转载)
看见一个不错的帖子(知乎) https://zhuanlan.zhihu.com/p/390757559 里面最主要就是要保证wsl里面安装的东西够了,第二就是vs2022已经安装了linux的相关模 ...