Java super关键字
2019-08-16 10:26:09来源:博客园 阅读 ()
Java super关键字
Java super关键字代表当前对象的直接父类的默认引用。 super关键字就类似于 C#中的base关键字。参见地址 super的注意事项: 1、super必须出现在子类中(子类的方法和构造方法中),而不是其他位置 2、super用于访问父类的成员,例如父类的属性、方法、构造方法 3、访问权限的限制,例如无法通过super访问父类的private成员。 super的使用场景 1、子类中使用了方法重写,但是又想调用父类的被重写了的方法,就要使用super关键字 2、super在子类构造函数中显示调动父类的无参构造或者其他有参构造(如果不显示写super,那么初始化子类实例时会默认调用父类的无参构造,如果此时父类没有无参构造,编译器会报错) super使用方法: 1、访问父类的属性或者对象,进行修改赋值操作 =》 super.变量/对象名; 2、直接访问并调用父类的方法 =》super.方法名(); 3、显式调用父类的构造方法,不管无参还是有参 =》 super() 无参例子 super(name)有参例子,如果子类不想调父类的无参构造,那么就必须要在子类的构造方法中显式的使用super调用父类的有参构造!!! 父类:public class A { public int age=11; public A() { System.out.println("Build A(无参构造)"); } public A(String name) { System.out.println(name + "Build A(有参构造)"); } public void Hello() { System.out.println("Hello,我是A方法里的Hello方法"); } }
子类
public class B extends A { public B() { System.out.println("Build B(无参构造)"); } public B(String name) { System.out.println(name+"Build B(有参构造)"); } public void Hello() { System.out.println("父类的age值是:"+super.age); //输出父类的成员变量 super.Hello();//显式调用父类的方法 System.out.println("Hello,我是B方法里的Hello方法"); } }
public class C extends A{ public int age=99; public C() { System.out.println("Build C(无参构造)"); } public C(String name) { super(name);//显式调用父类的有参构造,如果不写这句的话,默认调用父类无参构造,也就是等同于super(); System.out.println(name+"Build C(有参构造)"); } public void Hello() { System.out.println("Hello,我是C方法里的Hello方法"); } }
测试:
public class Test { public static void main(String[] args) { // TODO Auto-generated method stub //子类实例化无参 //子类无参实例化,首先会默认调用父类的无参构造,再调用子类的无参构造 //B b1=new B(); //输出:【Build A(无参构造) Build B(无参构造)】 //子类实例化有参,子类有参构造显式调用父类的无参构造(如果不显式,默认还是调父类的无参构造) //B b2=new B("猪");//输出: 【Build A(无参构造) 猪Build B(有参构造)】 //子类实例化有参,子类显式的调用父类的有参构造 //C c1=new C("驴");//输出:【驴Build A(有参构造) 驴Build C(有参构造)】 //子类实例化,调用父类的方法 /* B b3=new B(); b3.Hello(); //*/ /* 输出: * Build A(无参构造) Build B(无参构造) 父类的age值是:11 Hello,我是A方法里的Hello方法 Hello,我是B方法里的Hello方法 */ //子类和父类有公共的成员变量 /* C c2=new C("虎"); System.out.println("年龄: "+c2.age);//输出 99 A a1=new C("虎"); System.out.println("年龄: "+a1.age);//输出 11 //*/ //实例化子类,转为父类对象,输出的成员变量是父类的值,调用的方法是字类重写的方法 A a2=new C(); System.out.println("年龄: "+a2.age);//输出 11 a2.Hello();//如果C有重写方法,就显示C内的方法,如果没重写,就显示A的方法 } }
原文链接:https://www.cnblogs.com/schangxiang/p/11194264.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:Mybatis笔记3
- 国外程序员整理的Java资源大全(全部是干货) 2020-06-12
- 2020年深圳中国平安各部门Java中级面试真题合集(附答案) 2020-06-11
- 2020年java就业前景 2020-06-11
- 04.Java基础语法 2020-06-11
- Java--反射(框架设计的灵魂)案例 2020-06-11
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash