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相关推荐

  1. java全栈系列之JavaSE--冒泡排序028

    冒泡排序是在一组数组中将相邻的两个元素进行比较,可以按由大到小或者由小到大的循序排列, 冒泡排序示意图: 每循环一次相邻的两个数进行大小比较,若由小到大的循序则大的数据在小的数据右侧 冒泡排序流程图 ...

  2. Java全栈系列笔记

    Java全栈系列笔记 全部文档.项目.源码: github:https://github.com/name365/Blog-Java 码云:https://gitee.com/yang365/Blog ...

  3. Java全栈学习day05(面向对象02)

    1.继承 继承的概念 实现代码的重用,子类继承父类的一切属性和方法(除了构造方法),父类的私有属性.方法不能直接使用,需要get和set. package com.test;public class ...

  4. java全栈系列之JavaSE-面向对象(方法重写)037

    子类在调用父类的私有方法中不能直接调用,但是可以通过get方法进行调用,修改属性的值可以通过set方法进行修改.而子类想要修改父类中的方法可以使用方法重写进行操作. 方法重写与之前的方法重载不同 回顾 ...

  5. java全栈系列之JavaSE-面向对象(方法的定义与调用)030

    java面向对象编程 面向对象&面向过程 前言: 之前的代码大多数都是属于面向过程的,在程序中有main()方法也叫主方法,程序会由上至下执行main()里面的内容.程序里的方法:例如编写一个 ...

  6. java全栈系列之JavaSE--数组的三种初始化方法及内存分析024

    java内存分析 堆中存放new出来的对象和数组,存放具体的值的变量存放在栈里面 在定义和创建数组的时候内存发生了什么? 当用户定义了一个数组,例如:int [ ] Array;只是定义了一个数组没有 ...

  7. java全栈系列之JavaSE-面向对象(继承详解)035

    类的继承 java三大特性之一的继承,指的是子类继承父类的属性和方法,java类中只有单继承没有多继承,比如说:一个父亲(父类)可以有多个儿子(子类),但是一个儿子(子类)只能有一个父亲(父类) 在类 ...

  8. java全栈系列之JavaSE-面向对象(封装详解)034

    封装数据的隐藏 通常,应禁止直接访问一个对象中的数据的实际表示,而应通过操作接口来访问,这种称为信息隐藏 封装的意义: 提高数据的安全性,保护数据 隐藏代码的实现细节 统一接口 系统的可维护性增加了 ...

  9. java全栈系列之JavaSE-面向对象(异常详解)043

    Exception可以被程序处理的异常 异常指的是程序在运行中出现了无法预料的状况,异常发生在程序运行期间.程序中可以选择捕获异常,也可以不处理使用默认的异常 算术异常 通常是由于算术计算错误导致的 ...

最新文章

  1. IIS7.5 HTTP 错误 500 调用loadlibraryex失败的解决方法
  2. 索引与联合索引使用注意
  3. FPGA之道(58)关于外界接口的编程思路
  4. Linux C编程--线程操作1--线程概述和简单的线程操作
  5. 像个字段相减绝对值_遇见你丨像个英雄一样活着 瘫痪作家用手指敲击文字著百万字文学作品...
  6. 未来计算机控制器趋势,未来DCS控制系统技术发展4大趋势
  7. 《原力计划【第二季】》第 6 周周榜揭晓!!!
  8. 使用ros3d.js实现web 端3D建图
  9. swift 对象转换_Swift类型转换–照原样,任何对象
  10. (转)来自瑞士的七个葫芦娃:各怀绝技的Wealthtech解决方案商
  11. tp5.1语言包Lang使用,详解
  12. 菲尼克斯交换机FL SWITCH SFN 5TX
  13. 机箱前面板的耳机孔没声音的解决办法
  14. Liunx 安装 phpStudy
  15. mac的 tr命令_tr命令 - Holy_Shit - 博客园
  16. 无线路由器设置里的DHCP服务是什么意思
  17. 解析 数据库 苹果自带地图
  18. zz 图像数据投影投影数据重建图像 radon
  19. hc595 c语言程序,74HC595级联动态显示的C程序
  20. 内存缓存(in-memory cache)

热门文章

  1. Python1.语言基本要素上(郭炜老师python大学mooc)
  2. wt32-eth01 arduino
  3. 经典组合 堡垒主机构建防火墙系统
  4. 重磅资讯:《数据安全法》颁布,国家支持数据开发利用和数据安全技术研究
  5. linux远程开机wol,Wol在线远程开机、唤醒工具使用说明
  6. 什么是java实例化_JAVA实例化是什么意思?
  7. (转载)你好,C++(6)2.3 C++兵器谱
  8. 神探夏洛克第一季/全集Sherlock1迅雷下载
  9. 基于FME实现等高线的计曲线连接工具,快速连接计曲线在计曲线注记点断开处的缺口,计曲线批量连接,等高线批量连接
  10. 手把手教学差异表达基因分析