探讨 java 的三大特性之一:继承
先回顾一下, Java 面向对象的三大特性包括:封装、继承、多态。
PS:还有一些说四大特性,加了一个抽象
封装:将属性私有化,对外提供访问属性的方法,也可以不提供方法,这个特性叫做封装。
继承:
- 子类拥有父类对象所有的属性和方法(包括私有属性和私有方法),但是父类中的私有属性和方法子类是无法访问,只是拥有。
- 子类可以拥有自己属性和方法,即子类可以对父类进行扩展。
- 子类可以用自己的方式实现父类的方法
多态:多态就是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定,即一个引用变量到底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中实现的方法,必须在由程序运行期间才能决定。 简单得说,就是一个类有多个子类,在创建类得对象时,不同的子类,表现出来方法结果是不一致的,可以有多种形态。
现在主要探讨,子类拥有父类的所有属性和方法,包括私有属性和私有方法。
父类:
package com.entity; /**
* @author Robert_mml
*/
public class BaseUser { public BaseUser(String name) {
this.name = name;
} public BaseUser(String name, String age) {
this.name = name;
this.age = age;
} public BaseUser() {
System.out.println("父类");
} private BaseUser getInstance() {
return new BaseUser();
} private String name; private String age; public String like; public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public String getAge() {
return age;
} public void setAge(String age) {
this.age = age;
} public String getLike() {
return like;
} public void setLike(String like) {
this.like = like;
} public String zToString() {
return "BaseUser{" +
"name='" + name + '\'' +
", age='" + age + '\'' +
", like='" + like + '\'' +
'}';
}
}
子类:
package com.entity; /**
* @author Robert_mml
*/
public class SysUser extends BaseUser { private String name; private String age; public String like; public SysUser(String name) {
super(name);
} public SysUser(){
System.out.println("子类");
} // @Override
private SysUser getInstance() {
return new SysUser();
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public String getAge() {
return age;
} public void setAge(String age) {
this.age = age;
} @Override
public String getLike() {
return like;
} @Override
public void setLike(String like) {
this.like = like;
} public String getSuperLike() {
return super.getLike();
} public void setSuperLike(String like) {
super.setLike(like);
} public String zToString() {
return "SysUser{" +
"name='" + name + '\'' +
", age='" + age + '\'' +
", like='" + like + '}' +
" BaseUser{ " + super.zToString() + '\'' +
'}' + " BaseUser{ " + super.toString() + '\'' +
'}';
} }
发现子类拥有父类的私有属性时,子类已经可以自己拥有这些私有属性。并不会出现冲突。子类使用 @Override 标识相同的私有方法时,也会报错。
从这些看来,子类似乎不拥有父类的私有属性。
根据相关资料, 子类创建时,是会先创建一个父类对象,父类对象外层是一个子类,子类包含父类,在外层是子类的独有方法。
当子类和父类拥有相同名称的public属性,使用 @Override 标识依然报错,可以猜测,子类和父类,属性是在不同的内存空间。
Main:
package com.entity; public class Main { public static void main(String[] args) { SysUser sysUser = new SysUser(); sysUser.setLike("乒乓球");
sysUser.setSuperLike("羽毛球");
System.out.println(sysUser.toString());
System.out.println(sysUser.zToString());
} }
结果:
父类
子类
com.entity.SysUser@7cd84586
SysUser{name='null', age='null', like='乒乓球} BaseUser{ BaseUser{name='null', age='null', like='羽毛球'}'} BaseUser{ com.entity.SysUser@7cd84586'}
可以看出,父类的内存空间,是在子类上。
说明,父类在初始化时,是在子类的内存空间上进行初始化的,但是并没有创建一个真正的实例,但是子类属性是跟父类分开的。
PS:当把父类的无参构造方法去掉,仅保留有参构造方法时, 子类必须实现一个相同的有参构造方法,不实现会报错。
当父类拥有多个构造方法,子类只需要实现其中一种即可。
Java 继承父类子类内存分配解释:
https://blog.csdn.net/smithdoudou88/article/details/12756187
探讨 java 的三大特性之一:继承的更多相关文章
- 【转】java提高篇(二)-----理解java的三大特性之继承
[转]java提高篇(二)-----理解java的三大特性之继承 原文地址:http://www.cnblogs.com/chenssy/p/3354884.html 在<Think in ja ...
- Java 浅析三大特性之一继承
上文Java 浅析三大特性之一封装我们说到Java是一个注重编写类,注重于代码和功能复用的语言.Java实现代码复用的方式有很多,这里介绍一个重要的复用方式--继承. 在介绍继承之前,我们要明确一点, ...
- java提高篇(二)-----理解java的三大特性之继承
在<Think in java>中有这样一句话:复用代码是Java众多引人注目的功能之一.但要想成为极具革命性的语言,仅仅能够复制代码并对加以改变是不够的,它还必须能够做更多的事情.在这句 ...
- java提高篇(二)-----理解java的三大特性之继承
在<Think in java>中有这样一句话:复用代码是Java众多引人注目的功能之一.但要想成为极具革命性的语言,仅仅能够复制代码并对加以改变是不够的,它还必须能够做更多的事情.在这句 ...
- (转)java提高篇(二)-----理解java的三大特性之继承
在<Think in java>中有这样一句话:复用代码是Java众多引人注目的功能之一.但要想成为极具革命性的语言,仅仅能够复制代码并对加以改变是不够的,它还必须能够做更多的事情.在这句 ...
- java基础(二)-----java的三大特性之继承
在<Think in java>中有这样一句话:复用代码是Java众多引人注目的功能之一.但要想成为极具革命性的语言,仅仅能够复制代码并对加以改变是不够的,它还必须能够做更多的事情.在这句 ...
- Java的三大特性之继承
此处我会分为这几个部分来理解继承是怎么样的: 1.区分封装.继承和多态 2.区分限定词的范围 3.区分隐藏.覆盖.重载 4.继承的理解 5.一道面试题的原型 --------------------- ...
- java面向对象三大特性之继承
通过重用已经测试并验证通过的代码,怎样才减少开发工作,所有开发团队都在为一问题而努力.一个久经考验的方法是通过有效地使用Java继承优化应用程序开发. 继承的从某种意义上讲,继承的短暂美就如同宇宙中所 ...
- 深入理解Java面向对象三大特性 封装 继承 多态
1.封装 封装的定义: 首先是抽象,把事物抽象成一个类,其次才是封装,将事物拥有的属性和动作隐藏起来,只保留特定的方法与外界联系 为什么需要封装: 封装符合面向对象设计原则的第一条:单一性原则,一个类 ...
随机推荐
- 破解fireworks_cs6、phoneshop_cs6、dreamweaver_cs6
我的Adobe密码是绿尘枫加**0,首字母大写,在我的百度云盘有这三款软件的补丁,这三款软件安装和破解的方式都一样.先下载正常安装好正版软件>正常试用一遍之后,fireworks的补丁装错了文件 ...
- mysql通过TEXT字段进行关联的优化方案
mysql如果通过超长的字段进行on关联,会导致效率很低,7k关联1.4k,结果为30+W的数据量,执行时间高达50秒. 将这个字段进行md5,然后再通过md5后的值进行关联,执行效率会大大优化,同样 ...
- Java练习 SDUT-2240_织女的红线
织女的红线 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 好久不见牛郎哥哥了,织女非常想他,但是她想考验一下牛郎在她不 ...
- 《C语言深度解剖》学习笔记之关键字
第一章 关键字 C语言共有32个关键字. 关键字 auto 声明自动变量 int 声明整型变量 long 声明长整型变量 char 声明字符型变量 float 声明浮点型变量 short 声明短整 ...
- CRT (C run-time library)
一 产生 运行时库是程序在运行时所需要的库文件,通常以LIB或DLL形式提供. C运行时库就是C run-time library,诞生于20世纪70年代,是C而非C++语言世界的概念,C程序运行时需 ...
- 怎么清除火狐浏览器的cookie?
火狐浏览器清除Cookie方法/步骤 1.打开火狐浏览器.并在火狐浏览器工具栏找到并单击“工具”下的“选项”. 2.在打开的“火狐浏览器选项”程序窗口中,找到工具栏中的“隐私”并单击,在隐私选项下找到 ...
- Pytorch源码与运行原理浅析--网络篇(一)
前言 申请的专栏开通了,刚好最近闲下来了,就打算开这个坑了hhhhh 第一篇就先讲一讲pytorch的运行机制好了... 记得当时刚刚接触的时候一直搞不明白,为什么自己只是定义了几个网络,就可以完整的 ...
- Android Studio(四):Android Studio集成Genymotion
Android Studio相关博客: Android Studio(一):介绍.安装.配置 Android Studio(二):快捷键设置.插件安装 Android Studio(三):设置Andr ...
- 2013-2-1 pdf中无法用金山词霸取词问题
打开pdf的编辑——〉首选项——〉一般——〉选项——〉开始——〉只有经过认证的插件,把‘checkbox’里的勾去掉,重启. ★在acrobat reader启动画面里如果没有加载xdict32(工具 ...
- SuperSocket通过证书文件启用 TLS/SSL
你需要通过下面的步骤修改配置文件来使用你准备好的证书文件: 在server节点设置security属性: 在server节点下增加certificate子节点: 最后配置应该像这样: <serv ...