java全栈系列之JavaSE-面向对象(super详解)036
super和this之间的关系
super代表父类的属性,this代表当前类的属性
子类调用父类时this和super的区别
package Test_Demo4;
import Test_Demo1.Demo13;
public class Demo1 {public static void main(String[] args) {Demo3 D= new Demo3(); //实例化对象D.Print("李四"); //调用Print方法时传参}
}
class Demo2{ //创建Demo2父类,并创建父类属性nameString name="张三";public Demo2(){ //显式构造方法,名字与类名一致且没有返回值}
}
class Demo3 extends Demo2{ //创建Demo3并继承Demo2的属性和方法String name="王二"; //定义类变量public void Print(String name){ //创建输出方法,定义形式参数nameSystem.out.println(this.name); //this.name是当前类下的nameSystem.out.println(super.name); //super是父类的name属性System.out.println(name); //形式参数name}
}
执行结果:
王二
张三
李四
子类调用父类的方法时this和super的区别
package Demo1;
public class Demo001 {public static void main(String[] args) {Demo003 D3=new Demo003(); //实例化对象D3.test(); //调用Demo003下的test()方法}
}
class Demo002{ //定义Demo002方法用作父类String name="张三"; //定义实例变量赋予初始值public void demo(){ //定义公共方法System.out.println(this.name); //输出当前类中的name属性}
}
class Demo003 extends Demo002{ //定义Demo003用于继承Demo002的属性和方法String name="李四"; //定义实例变量赋予初始值public void demo(){ //定义公共方法System.out.println(this.name); 输出当前类中的name属性}public void test(){ //创建测试方法用于实现方法的调用this.demo(); //调用当前类的demo()方法super.demo(); //调用父类的demo()方法demo(); //调用公共类的demo()方法}
}
执行结果:
李四
张三
李四
父类方法的调用
使用继承的时候如果要继承父类的方法需要在前面的修饰符加上public(公共的)才能够使子类继承父类的方法
如果子类在继承父类的方法或者属性时,前面的修饰符为private(私有的)时则子类无法直接进行调用或者操作
父类属性前加修饰符private子类无法直接调用
使用get/set方法进行私有属性方法调用
虽然无法直接调用父类的private属性,但是可以通过get/set方法进行调用和修改
public class Demo004 {public static void main(String[] args) {Demo007 D7=new Demo007(); //实例化对象String s1=D7.getName(); //将D7.getName()方法赋值于s1属性System.out.println(s1); //输出s1}
}
class Demo006{ //定义Demo006类private String name="许志滨2"; //定义私有属性private void demo006(){ //定义私有方法System.out.println(this.name);}public String getName() { //定义getName()方法return name;}public void setName(String name) { //定义setName()方法this.name = name;}
}
class Demo007 extends Demo006{ //定义Demo007类用于集成Demo006public Demo007(){//构造方法,不写默认也会有}
}
执行结果:许志滨2
为什么没有输出两次许志滨2,因为只是调用了name属性,并未调用demo006的方法
使用set方法对私有属性进行修改
Demo007 通过继承Demo006类使用set()方法将私有属性进行修改
package Demo1;
public class Demo004 {public static void main(String[] args) {Demo007 D7=new Demo007();D7.setName("许志滨666"); //调用时传实际参数D7.demo006(); //调用demo006公共方法}
}
class Demo006{private String name="许志滨2"; //定义私有属性public void demo006(){ //定义公共方法System.out.println(this.name); //输出当前类name的值}public void setName(String name) { //创建set方法this.name = name;}
}
class Demo007 extends Demo006{ //继承public Demo007(){}
}
注意:父类的私有方法无法被继承
无参构造器的调用
package Demo1;
public class Demo008 {public static void main(String[] args) {new demo010(); //调用无参构造}
}
class demo009{public demo009(){ //定义无参构造System.out.println("demo009");}
}
class demo010 extends demo009{ //继承demo009public demo010(){ //定义无参构造System.out.println("demo010");}
}
执行结果:
demo009
demo010
在demo010构造方法中隐形的在首部调用了父类的构造方法
class demo010 extends demo009{public demo010(){super(); //隐形在首部调用了父类的构造方法System.out.println("demo010");}
}
且super();会默认的被隐形添加,只能写在构造方法的首部
小结
super调用父类的构造方法,必须在构造方法的首部
super必须只能出现在子类的方法或者构造方法中
super和this不能同时调用构造方法
this没有继承关系也可以进行调用,super只能在有继承条件下才能使用
this本类构造,super父类构造
java全栈系列之JavaSE-面向对象(super详解)036相关推荐
- java全栈系列之JavaSE--冒泡排序028
冒泡排序是在一组数组中将相邻的两个元素进行比较,可以按由大到小或者由小到大的循序排列, 冒泡排序示意图: 每循环一次相邻的两个数进行大小比较,若由小到大的循序则大的数据在小的数据右侧 冒泡排序流程图 ...
- Java全栈系列笔记
Java全栈系列笔记 全部文档.项目.源码: github:https://github.com/name365/Blog-Java 码云:https://gitee.com/yang365/Blog ...
- Java全栈学习day05(面向对象02)
1.继承 继承的概念 实现代码的重用,子类继承父类的一切属性和方法(除了构造方法),父类的私有属性.方法不能直接使用,需要get和set. package com.test;public class ...
- java全栈系列之JavaSE-面向对象(方法重写)037
子类在调用父类的私有方法中不能直接调用,但是可以通过get方法进行调用,修改属性的值可以通过set方法进行修改.而子类想要修改父类中的方法可以使用方法重写进行操作. 方法重写与之前的方法重载不同 回顾 ...
- java全栈系列之JavaSE-面向对象(方法的定义与调用)030
java面向对象编程 面向对象&面向过程 前言: 之前的代码大多数都是属于面向过程的,在程序中有main()方法也叫主方法,程序会由上至下执行main()里面的内容.程序里的方法:例如编写一个 ...
- java全栈系列之JavaSE--数组的三种初始化方法及内存分析024
java内存分析 堆中存放new出来的对象和数组,存放具体的值的变量存放在栈里面 在定义和创建数组的时候内存发生了什么? 当用户定义了一个数组,例如:int [ ] Array;只是定义了一个数组没有 ...
- java全栈系列之JavaSE-面向对象(继承详解)035
类的继承 java三大特性之一的继承,指的是子类继承父类的属性和方法,java类中只有单继承没有多继承,比如说:一个父亲(父类)可以有多个儿子(子类),但是一个儿子(子类)只能有一个父亲(父类) 在类 ...
- java全栈系列之JavaSE-面向对象(封装详解)034
封装数据的隐藏 通常,应禁止直接访问一个对象中的数据的实际表示,而应通过操作接口来访问,这种称为信息隐藏 封装的意义: 提高数据的安全性,保护数据 隐藏代码的实现细节 统一接口 系统的可维护性增加了 ...
- java全栈系列之JavaSE-面向对象(异常详解)043
Exception可以被程序处理的异常 异常指的是程序在运行中出现了无法预料的状况,异常发生在程序运行期间.程序中可以选择捕获异常,也可以不处理使用默认的异常 算术异常 通常是由于算术计算错误导致的 ...
最新文章
- IIS7.5 HTTP 错误 500 调用loadlibraryex失败的解决方法
- 索引与联合索引使用注意
- FPGA之道(58)关于外界接口的编程思路
- Linux C编程--线程操作1--线程概述和简单的线程操作
- 像个字段相减绝对值_遇见你丨像个英雄一样活着 瘫痪作家用手指敲击文字著百万字文学作品...
- 未来计算机控制器趋势,未来DCS控制系统技术发展4大趋势
- 《原力计划【第二季】》第 6 周周榜揭晓!!!
- 使用ros3d.js实现web 端3D建图
- swift 对象转换_Swift类型转换–照原样,任何对象
- (转)来自瑞士的七个葫芦娃:各怀绝技的Wealthtech解决方案商
- tp5.1语言包Lang使用,详解
- 菲尼克斯交换机FL SWITCH SFN 5TX
- 机箱前面板的耳机孔没声音的解决办法
- Liunx 安装 phpStudy
- mac的 tr命令_tr命令 - Holy_Shit - 博客园
- 无线路由器设置里的DHCP服务是什么意思
- 解析 数据库 苹果自带地图
- zz 图像数据投影投影数据重建图像 radon
- hc595 c语言程序,74HC595级联动态显示的C程序
- 内存缓存(in-memory cache)
热门文章
- Python1.语言基本要素上(郭炜老师python大学mooc)
- wt32-eth01 arduino
- 经典组合 堡垒主机构建防火墙系统
- 重磅资讯:《数据安全法》颁布,国家支持数据开发利用和数据安全技术研究
- linux远程开机wol,Wol在线远程开机、唤醒工具使用说明
- 什么是java实例化_JAVA实例化是什么意思?
- (转载)你好,C++(6)2.3 C++兵器谱
- 神探夏洛克第一季/全集Sherlock1迅雷下载
- 基于FME实现等高线的计曲线连接工具,快速连接计曲线在计曲线注记点断开处的缺口,计曲线批量连接,等高线批量连接
- 手把手教学差异表达基因分析