{"id":21974130,"url":"https://github.com/javaobjects/demo514_1","last_synced_at":"2025-08-07T20:24:03.431Z","repository":{"id":105562287,"uuid":"195210901","full_name":"javaobjects/demo514_1","owner":"javaobjects","description":"Java面向对象高级特性","archived":false,"fork":false,"pushed_at":"2019-08-01T04:43:56.000Z","size":145,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-22T23:27:46.726Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/javaobjects.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-07-04T09:24:38.000Z","updated_at":"2019-08-01T04:43:58.000Z","dependencies_parsed_at":null,"dependency_job_id":"23214447-8339-468a-8ba0-6e031359509e","html_url":"https://github.com/javaobjects/demo514_1","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/javaobjects/demo514_1","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/javaobjects%2Fdemo514_1","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/javaobjects%2Fdemo514_1/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/javaobjects%2Fdemo514_1/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/javaobjects%2Fdemo514_1/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/javaobjects","download_url":"https://codeload.github.com/javaobjects/demo514_1/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/javaobjects%2Fdemo514_1/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":269317971,"owners_count":24397008,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-07T02:00:09.698Z","response_time":73,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-29T15:38:47.873Z","updated_at":"2025-08-07T20:24:03.363Z","avatar_url":"https://github.com/javaobjects.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 93-Java-Super关键字.md\n\n现在有Person类Consumer类(继承Person类)和Test类，需求：实例化Consumer，并给username属性赋值\n\n```\npackage super关键字;\n\npublic class Person {\n\tprotected String username;//protected 子类可以访问到\n\t\n\tpublic Person(String username) {\n\t\tthis.username = username;\n\t}\n\tpublic String getUsername() {\n\t\treturn username;\n\t}\n\tpublic void setUsername(String username) {\n\t\tthis.username = username;\n\t}\n\tpublic Person() {\n\t\tSystem.out.println(\"Person()\");\n\t}\n\tpublic void walk() {\n\t\tSystem.out.println(\"person is walking.....\");\n\t}\n}\n```\n\n```\npackage super关键字;\n\npublic class Consumer extends Person {//这就表达继承\n\t//private String username;\n\t\n\tpublic Consumer() {\n\t\tSystem.out.println(\"Consumer()\");\n\t}\n\tpublic Consumer(String username) {\n\t\tthis.setUsername(username);\n\t}\n\n\t@Override\n\tpublic void walk() {\n\t\tsuper.walk();\n\t\tSystem.out.println(\"Consumer is walking....\");\n\t\tSystem.out.println(\"Boss is dancing....\");\n\t}\n}\n```\n```\npackage super关键字;\n\npublic class Test {\n\n\tpublic static void main(String[] args) {\n\n\t\t//实例化Consumer，并给username属性赋值\n\t\tConsumer c = new Consumer(\"zhangsan\");//第二种\n//\t\tc.setUsername(\"zhangsan\");//第一种\n\t\tSystem.out.println(c.getUsername());\n\t}\n}\n```\n\n第三种方法：\n\n```\npackage super关键字;\n\npublic class Consumer extends Person {//这就表达继承\n\t//private String username;\n\t\n\tpublic Consumer() {\n\t\tsuper();//这里有没有这个super()效果是一样的，因为子类实例化时一定是先实例化其父类，然后才实例化子类。\n\t\tSystem.out.println(\"Consumer()\");\n\t}\n\t\n//\tpublic Consumer() {\n//\t\tsuper();\n//\t}\n\tpublic Consumer(String username) {\n//\t\tthis.setUsername(username);\n\t\t//可以调用父类构造器：实现给username属性赋值的目的\n//\t\tsuper(username);//调用父类构造器 使用super关键字不但可以访问父类构造器还可以访问父类属性父类行为\n\t\tsuper.username = username;//super关键字 可以访问父类的非私有属性\n\t\tsuper.walk();\n\t}\n\n\t@Override\n\tpublic void walk() {\n\t\tsuper.walk();\n\t\tSystem.out.println(\"Consumer is walking....\");\n\t\tSystem.out.println(\"Boss is dancing....\");\n\t}\n}\n```\n\n#### 总结：\n\n**super关键字作用以及注意事项：**\n\n1. super可以调用父类构造方法\n2. 可以调用父类中子类可以访问的属性\n3. 可以调用父类中子类可以访问的方法\n4. super使用时,在同一个构造器中super()和this()不能同时出现\n5. super(),调用父类构造方法，代码必须出现在第一行；\n\n#### 拓展：\n\n**super和this关键字的区别？**\n\n+ super()\n\n    + 作用：调用父类的构造器\n    + 只能出现在子类的构造器中，且必须是第一行\n    + super()中的参数，决定了调用父类哪个构造器\n    + 如果子类构造器中没有出现super，那么编译器会默认加上super()，即调用父类的空构造器，如果父类没有空构造器，编译器提示错误。\n\n+ this()\n    + 作用：调用本类的构造器\n    + 只能写在构造器的第一行\n\n+ 在同一个构造器中super()和this()不能同时出现\n\n+ super.\n    + 指向父类的引用。\n    + 通过关键字super我们可以指定子类在构造时调用父类的哪个构造器，达到先实例化父类然后实例化子类的目的。\n    + 子类的构造器默认的调用父类无参构造器，即子类构造器中没有用super指明调用父类哪个构造器的话，实际上编译器会自动的在子类构造器第一行加入代码super( );\n\n+ this.\n    + 指向本类的引用。\n    + 我们知道子类在实例化时必须调用父类的构造器，实际上有的子类构造器也可以先调用本类的其他构造器，然后再通过那个构造器调用父类的构造器\n    + 无论是调用父类的构造器还是子类的构造器，最终都是找到最顶级的父类自上而下的实例化。只要中间环节有一个构造器没找到，这个子类就无法完成实例化。\n\n\n**子类实例化的过程**\n\n+ 使用默认的构造器\n+ 在子类中的创建构造器 \n    + 在子类中创建构造器时，必须调用父类的构造器\n    + 子类可以在自己的构造器中使用super关键字来调用父类的构造器\n    + 如果使用super关键字调用父类构造器，必须写在该子类构造器的第一行\n    + **\u003cspan style=\"color:red;\"\u003e如调用的是父类中无参的构造器，则可以不写super( )\u003c/span\u003e**\n    + 如果子类中调用了父类无参的构造器，而父类中没有无参构造器则系统编译出错\n\n**以就就是我关于 *Java-Super关键字*  知识点的整理与总结的全部内容，[另附源码](https://github.com/javaobjects/demo514_1)**\n\n==================================================================\n#### 分割线\n==================================================================\n\n**博主为咯学编程：父母不同意学编程，现已断绝关系;恋人不同意学编程，现已分手;亲戚不同意学编程，现已断绝来往;老板不同意学编程,现已失业三十年。。。。。。如果此博文有帮到你欢迎打赏，金额不限。。。**\n\n![](images/pay.png) ","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjavaobjects%2Fdemo514_1","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjavaobjects%2Fdemo514_1","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjavaobjects%2Fdemo514_1/lists"}