super关键字用法

合集下载

关于UE中父类和子类函数互相调用的方法

关于UE中父类和子类函数互相调用的方法

关于UE中父类和子类函数互相调用的方法在UE中,父类和子类之间的函数互相调用是一种常见的需求。

通过这种方式,我们可以在子类中重写父类方法,并在子类中引用和调用父类方法。

父类和子类之间的函数调用可以通过两种方式实现:直接调用和通过super关键字调用。

直接调用方法是一种简单的方式,子类可以直接持有父类的实例,然后通过这个实例调用父类的方法。

首先,需要在子类中声明一个成员变量来引用父类的实例。

然后,在子类的构造函数中,使用父类的构造函数来初始化这个引用。

这样,我们就可以在子类中直接调用父类的方法了。

例如,在子类的一些方法中,可以通过父类实例的变量来调用父类的方法。

另一种方式是使用super关键字来调用父类的方法。

在子类的方法中,可以使用super关键字来指示调用父类的方法。

这种方式更为灵活,可以在子类中重写父类方法,然后在子类方法中使用super关键字来调用父类的方法。

这样就可以实现子类调用父类的方法,并且在子类方法中可以添加一些额外的逻辑。

在使用super关键字调用父类方法时1. 在子类中使用super关键字来调用父类方法时,要确保父类中存在要调用的方法。

否则,编译器会报错。

2.在子类中调用父类方法时,要考虑父类方法的访问权限。

如果父类方法是私有的或受保护的,那么子类无法直接调用这些方法。

在这种情况下,我们可以将父类方法声明为公有的,以便子类可以直接访问。

3. 当子类继承多个父类时,可能会出现父类方法名冲突的情况。

在这种情况下,我们可以使用super关键字来明确指定调用哪个父类的方法。

例如,使用`super::父类名::方法名`来调用特定父类的方法。

总结起来,父类和子类之间的函数互相调用可以通过直接调用和使用super关键字来实现。

无论使用哪种方式,重要的是在设计类的时候,要考虑到函数调用的灵活性和合理性。

这样,我们才能更好地在UE中编写具有良好设计的代码。

super关键字

super关键字

super关键字super关键字super代表的是“当前对象(this)”的⽗类型特征。

super的特征1. super是⼀个关键字,全部⼩写。

2. super和this对⽐着学习。

this:this能出现在实例⽅法和构造⽅法中.this的语法是:"this."、"this ()"this不能使⽤在静态⽅法中。

**this. ** ⼤部分情况下是可以省略的。

this. 什么时候不能省略呢? 在区分局部变量和实例变量的时候不能省略public void setName ( string nane) { = name ;}this()只能出现在构造⽅法第⼀⾏,通过当前的构造⽅法去调⽤"本类"中其它的构造⽅法,⽬的是:代码复⽤。

this可以单独使⽤super:super能出现在实例⽅法和构造⽅法中.this的语法是:"super. "、"super ()"super不能使⽤在静态⽅法中。

super. ⼤部分情况下是可以省略的。

super. 什么时候不能省略呢? ⽗类和⼦类有同名属性时,你想在⼦类调⽤⽗类的那个属性,这个时候“super.”是不可以省略的。

super()只能出现在构造⽅法第⼀⾏,通过当前的构造⽅法去调⽤"⽗类"中其它的构造⽅法,⽬的是:在创建⼦类对象的时候,先初始化⽗类型特征。

super不能单独使⽤,否则编译会报错!要么"super."要么"super()",由此可以得出,super不是引⽤,不存内存地址,也不指向任何对象,3. super ()表⽰通过⼦类的构造⽅法调⽤⽗类的构造⽅法。

模拟现实世界中的这种场景:要想有⼉⼦,需要先有⽗亲。

4. 重要的结论当⼀个构造⽅法第⼀⾏:既没有this()有没有super(),默认会有⼀个super(),表⽰通过当前⼦类的构造⽅法调⽤⽗类的⽆参数构造⽅法。

java super()使用实例

java super()使用实例

Java中的super()方法是用来调用父类的构造方法的关键字。

在面向对象编程中,父类和子类之间的关系非常重要,而super()方法就是在子类中调用父类的构造方法的一种方式。

1. super()方法的作用在Java中,当创建子类的实例时,通常会调用父类的构造方法来初始化父类中的成员变量和方法。

而使用super()方法可以在子类的构造方法中显式地调用父类的构造方法,以便完成对父类成员变量的初始化工作。

2. super()方法的语法在子类的构造方法中使用super()方法的语法非常简单,只需要在子类构造方法的第一行代码中使用super()即可。

例如:```javapublic class SubClass extends SuperClass {public SubClass() {super();// other initialization code}}```在这个例子中,SubClass是子类,SuperClass是父类,super()方法用来调用SuperClass的构造方法。

3. super()方法的参数在使用super()方法时,还可以传递参数给父类的构造方法,以便完成更为复杂的初始化工作。

例如:```javapublic class SubClass extends SuperClass {public SubClass(int param) {super(param);// other initialization code}}```在这个例子中,SubClass的构造方法接受一个参数param,然后通过super(param)调用父类的构造方法,将参数传递给父类的构造方法。

4. super()方法与this()方法的区别在Java中,this()方法用来调用同一个类中的其他构造方法,而super()方法用来调用父类的构造方法。

它们的主要区别在于this()方法是针对当前类的构造方法,而super()方法是针对父类的构造方法。

Java中的两个关键字——super、this

Java中的两个关键字——super、this

Java中的两个关键字——super、thisJava中的两个关键字——super、this ⼀、supersuper 是java中⽅的⼀个关键字,⽤它可以引⽤⽗类中的成员:super可⽤于访问⽗类中定义的属性super可⽤于调⽤⽗类中定义的成员⽅法super可⽤于在⼦类构造器中调⽤⽗类的构造器使⽤super关键字注意事项:1、当⼦类和⽗类都有同名的属性时,在⼦类中如果要使⽤⽗类的属性 super . 属性2、 super只能应⽤在成员⽅法和构造⽅法中,不能⽤在静态⽅法中(和this是⼀样的)3、如果在构造⽅法中使⽤必须放在第⼀⾏4、在构造⽅法中this()和super()不能同时出现super没有什么需要解释的地⽅,我们⽤代码来看看super具体的⼀些强⼤功能吧⽰例⼀、使⽤super调⽤基类的属性:public class Father { int num=20;}public class Child extends Father{ int num; public void print(){ num=10; super.num=30; System.out.println("num="+num); System.out.println("="+super.num); }}public class Test { public static void main(String[] args) { Child xm=new Child(); xm.print(); }}运⾏结果:⽰例⼆、使⽤super调⽤基类中的构造⽅法:public class Father { int num; public Father() { System.out.println("⽗类中的⽆参构造⽅法---"); } public Father(int num){ System.out.println("⽗类中的有参的构造⽅法----"+num); }}public class Child extends Father{ int num; public Child() { super(30); System.out.println("⼦类⽆参构造⽅法---"); } public Child(int num) { this.num = num; System.out.println("⼦类中的有参的构造⽅法---"+num); }}解释⼀下上⾯的这段代码:在Child类中的第⼀个构造函数⾥⾯,super(30);它会去调⽤⽗类中嗲有⼀个int型参数的构造⽅法。

This和Super的区别

This和Super的区别

This和Super的区别
⼀:this
java中this关键字的作⽤和词义很接近:
它在⽅法内部使⽤,即这个⽅法所属对象的引⽤
它在构造器内部使⽤,表⽰该构造器正在初始化的对象。

this表⽰当前对象,可以调⽤类的属性、⽅法和构造器。

注意
使⽤this()必须放在构造器的⾸⾏!
使⽤this()调⽤本类中其他的构造器,保证⾄少有⼀个构造器不是⽤this的。

⼆:super
java类中使⽤super来调⽤⽗类中的指定操作:
super可⽤于访问⽗类中定义的属性
super可⽤于调⽤⽗类中定义的成员⽅法
super可⽤于在⼦类构造⽅法中调⽤⽗类的构造器
注意
尤其当⼦⽗类出现同名成员是,可以⽤super进⾏区分。

super的追溯不仅限于直接⽗类。

super和this的⽤法相像,this代表本类对象的引⽤,super代表⽗类的内存空间的标识。

三:this和super区别
No.区别点this super
1访问属性访问本类中的属性,如果本类没有此属性则从⽗类中继续查找访问⽗类中的属性
2调⽤⽅法访问本类中的⽅法直接访问⽗类中的⽅法
3调⽤构造器调⽤本类构造器,必须放在构造器⾸⾏调⽤⽗类构造器,必须放在⼦类构造器的⾸⾏4特殊表⽰当前对象⽆。

super(context, attrs)用法

super(context, attrs)用法

超级调用super(context, attrs)在Android开发中,我们经常会看到在自定义View或ViewGroup的构造方法中使用super(context, attrs)这样的代码。

那么这个super(context, attrs)到底是什么意思,有什么作用呢?在本文中,我将向大家介绍super(context, attrs)的用法,并解释其作用和意义。

1. super(context, attrs)的基本概念在Java语言中,super关键字表示对父类的引用,我们可以使用super来调用父类中的构造方法、属性和方法。

而在Android中,通常在自定义View或ViewGroup的构造方法中使用super(context, attrs)来调用父类的构造方法。

其中,context代表上下文,attrs代表属性集合(AttributeSet)。

2. super(context, attrs)的作用当我们在自定义View或ViewGroup中使用super(context, attrs)时,实际上是在调用父类构造方法的将传入的context和attrs传递给父类,以便父类能够对这些参数进行处理。

这样做的好处是能够保证自定义View或ViewGroup具有与系统控件相似的属性初始化方式,同时也能够保证上下文的正确传递,使得自定义控件能够正确地与其他系统控件进行交互。

3. super(context, attrs)的应用场景在实际的Android开发中,我们经常会使用自定义View或ViewGroup来实现复杂的界面和交互效果。

而在这些自定义控件中,通常都需要使用super(context, attrs)来保证正确的初始化和交互。

我们经常会在自定义控件的构造方法中使用super(context, attrs)来调用父类构造方法,以便正确地处理传入的上下文和属性。

4. super(context, attrs)的注意事项在使用super(context, attrs)时,需要注意一些细节问题。

java基础编程 第四章 面向对象(下) 案例

java基础编程 第四章 面向对象(下) 案例

案例4-1 super访问父类成员变量一、案例描述1、考核知识点编号:029004003名称:super关键字2、练习目标➢掌握使用super关键字访问父类成员变量的方法3、需求分析子类可以继承父类的非私有成员变量,如果在子类中修改了继承自父类的成员变量的值,再想要访问父类的该成员变量时,可以通过super.成员变量来实现。

为了让初学者熟悉super关键字的用法,本案例将分别设计Fu类及其子类Zi,并在Zi类的方法中使用super关键字访问Fu类的成员变量。

4、设计思路(实现原理)1)编写一个Fu类,在类中定义无参构造和一个初始值为20的num成员变量。

2)Zi类继承Fu类,在子类中对num值进行了修改,同时在子类中定义无参构造和一个无返回值的method()方法,method()方法中使用super关键字调用了Fu类的num成员变量。

3)定义测试类Example03。

二、案例实现1、编写Fu类及其子类Zi,在Zi类中使用super关键字调用Fu类成员变量,代码如下class Fu {Fu() {}int num = 20;}class Zi extends Fu {Zi() {}int num = 30;// 修改num的值void method() {System.out.println("method");// super关键字调用父类成员变量System.out.println("Fu类中num值为:" + super.num);System.out.println("Zi类中num值为:" + num);}}2、定义测试类Example03,代码如下:class Example03{public static void main(String[] args) {Zi z = new Zi();z.method();}}运行结果如图4-3所示。

this和super的区别和应用。

this和super的区别和应用。

this和super的区别和应⽤。

this和super都代表什么。

this:代表当前对象的引⽤,谁来调⽤我我就代表谁。

super:代表当前对象对⽗类的引⽤。

this和super的使⽤区别。

a、调⽤成员变量;
this.成员变量调⽤本类的成员变量,也可以调⽤⽗类的成员变量。

super.成员变量调⽤⽗类的成员变量。

b、调⽤构造⽅法。

this(...)调⽤本类的构造⽅法。

super(...)调⽤⽗类的构造⽅法。

c、调⽤成员⽅法。

this.成员⽅法调⽤本类的成员⽅法,也可以调⽤⽗类的⽅法。

super.成员⽅法调⽤分类的成员⽅法。

=============================================================================================
⼦类中所有的构造⽅法默认都会访问⽗类中空参数的构造⽅法;(因为⼦类会继承⽗类中的数据可能还会使⽤⽗类的数据,所以⼦类初始化之前⼀定要先完成⽗类数据的初始化。

其实每⼀个构造⽅法的第⼀条语句默认都是:super() object类最顶层的⽗类)。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

使用super来引用父类的成分,用this来引用当前对象一、super关键字
在JAVA类中使用super来引用父类的成分,用this来引用当前对象,如果一个类从另
外一个类继承,我们new这个子类的实例对象的时候,这个子类对象里面会有一个父类对象。

怎么去引用里面的父类对象呢?使用super来引用,this指的是当前对象的引用,super是当前对象里面的父对象的引用。

1.1.super关键字测试
1package cn.galc.test;
2
3/**
4 * 父类
5 * @author gacl
6 *
7*/
8class FatherClass {
9public int value;
10public void f() {
11 value=100;
12 System.out.println("父类的value属性值="+value);
13 }
14 }
15
16/**
17 * 子类ChildClass从父类FatherClass继承
18 * @author gacl
19 *
20*/
21class ChildClass extends FatherClass {
22/**
23 * 子类除了继承父类所具有的valu属性外,自己又另外声明了一个value属性,
24 * 也就是说,此时的子类拥有两个value属性。

25*/
26public int value;
27/**
28 * 在子类ChildClass里面重写了从父类继承下来的f()方法里面的实现,即重写了f()方法的方法体。

29*/
30public void f() {
31super.f();//使用super作为父类对象的引用对象来调用父类对象里面的f()方法
32 value=200;//这个value是子类自己定义的那个valu,不是从父类继承下来的那个value
33 System.out.println("子类的value属性值="+value);
34 System.out.println(value);//打印出来的是子类自定义的那个value的值,这个值是200
35/**
36 * 打印出来的是父类里面的value值,由于子类在重写从父类继承下来的f()方法时,
37 * 第一句话“super.f();”是让父类对象的引用对象调用父类对象的f()方法,
38 * 即相当于是这个父类对象自己调用f()方法去改变自己的value 属性的值,由0变了100。

39 * 所以这里打印出来的value值是100。

40*/
41 System.out.println(super.value);
42 }
43 }
44
45/**
46 * 测试类
47 * @author gacl
48 *
49*/
50public class TestInherit {
51public static void main(String[] args) {
52 ChildClass cc = new ChildClass();
53 cc.f();
54 }
55 }
运行结果:
1.2. 画内存分析图了解程序执行的整个过程
分析任何程序都是从main方法的第一句开始分析的,所以首先分析main方法里面的第一句话:
ChlidClass cc = new ChlidClass();
程序执行到这里时,首先在栈空间里面会产生一个变量cc,cc里面的值是什么这不好说,总而言之,通过这个值我们可以找到new出来的Chlid Class对象。

由于子类Chlid Class是从父类Father Class继承下来的,所以当我们new一个子类对象的时候,这个子类对象里面会包含有一个父类对象,而这个父类对象拥有他自身的属性value。

这个value成员变量在
Father Class类里面声明的时候并没有对他进行初始化,所以系统默认给它初始化为0,成员变量(在类里面声明)在声明时可以不给它初始化,编译器会自动给这个成员变量初始化,但局部变量(在方法里面声明)在声明时一定要给它初始化,因为编译器不会自动给局部变量初始化,任何变量在使用之前必须对它进行初始化。

子类在继承父类value属性的同时,自己也单独定义了一个value属性,所以当我们new
出一个子类对象的时候,这个对象会有两个value属性,一个是从父类继承下来的value,另一个是自己的value。

在子类里定义的成员变量value在声明时也没有给它初始化,所以编译器默认给它初始化为0。

因此,执行完第一句话以后,系统内存的布局如下图所示:
接下来执行第二句话:
1 cc.f();
当new一个对象出来的时候,这个对象会产生一个this的引用,这个this引用指向对象自身。

如果new出来的对象是一个子类对象的话,那么这个子类对象里面还会有一个super 引用,这个super指向当前对象里面的父对象。

所以相当于程序里面有一个this,this指向对象自己,还有一个super,super指向当前对象里面的父对象。

这里调用重写之后的f()方法,方法体内的第一句话:“super.f();”是让这个子类对象里面的父对象自己调用自己的f()方法去改变自己value属性的值,父对象通过指向他的引用super来调用自己的f()方法,所以执行完这一句以后,父对象里面的value的值变成了100。

接着执行“value=200;”这里的vaule是子类对象自己声明的value,不是从父类继承下来的那个
value。

所以这句话执行完毕后,子类对象自己本身的value值变成了200。

此时的内存布局如下图所示:
方法体内的最后三句话都是执行打印value值的命令,前两句打印出来的是子类对象自己的那个value值,因此打印出来的结果为200,最后一句话打印的是这个子类对象里面的父类对象自己的value值,打印出来的结果为100。

到此,整个内存分析就结束了,最终内存显示的结果如上面所示。

相关文档
最新文档