Java中this、super用法

合集下载

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关键字在Java中用于访问父类的成员变量和方法。

它可以用来调用父类构造方法,访问父类中被子类覆盖的方法和变量,以及在子类中显式地调用父类中的方法。

super关键字的一些常见用法包括:1. 调用父类的构造方法在子类中使用super关键字可以调用父类的构造方法。

这种方式通常用于子类构造函数中需要调用父类构造函数的场景。

例如:```public class Animal {int age;public Animal(int age) {this.age = age;}}public class Dog extends Animal {String name;public Dog(int age, String name) {super(age); = name;}}```在Dog类的构造函数中使用了super关键字来调用Animal类的构造函数。

2. 访问父类中被子类覆盖的方法和变量当子类覆盖了父类中的方法或者变量时,可以使用super关键字来访问父类中被覆盖的方法或者变量。

例如:```public class Animal {public void sayHello() {System.out.println('Animal says hello!');}}public class Dog extends Animal {@Overridepublic void sayHello() {super.sayHello();System.out.println('Dog says hello!');}}```在Dog类的sayHello方法中使用了super关键字来访问父类中的sayHello方法,从而实现了在子类方法中调用父类方法的效果。

3. 在子类中显式地调用父类中的方法子类中可以使用super关键字来显式地调用父类中的方法。

这种方式通常在需要在子类中扩展父类方法的同时,保留父类方法的实现逻辑时使用。

java中this的用法

java中this的用法

java中this的用法This,英语单词,发音:[英][ðɪs][美][ðɪs]。

常翻译为:这,这么。

java中this的用法有哪些呢?本文是店铺整理java中this的用法的资料,仅供参考。

java中this的用法11. this指当前对象。

当在一个类中要明确指出使用对象变量或函数时加上this引用。

如下面例子中:public class Hello {String s = "Hello";public Hello(String s){System.out.println("s = " + s);System.out.println("1 -> this.s = " + this.s);this.s = s;System.out.println("2 -> this.s = " + this.s);}public static void main(String[] args) {Hello x=new Hello("HelloWorld!");}}运行结果:s = HelloWorld!1 -> this.s = Hello2 -> this.s = HelloWorld!在这个例子中,构造函数Hello中,参数s与类Hello的变量s同名,这时直接对s进行操作则是对参数s进行操作。

对类Hello的成员变量s进行操作就应该用this进行引用。

运行结果的第一行就是直接对构造函数中传递过来的参数s进行打印结果;第二行是对成员变量s的打印;第三行是先对成员变量s赋传过来的参数s值后再打印,所以结果是HelloWorld!2. this作为参数传递当你要把自己作为参数传递给别的对象时如:public class A {public A() {new B(this).print();}public void print() {System.out.println("Hello from A!");}}public class B {A a;public B(A a) {this.a = a;}public void print() {a.print();System.out.println("Hello from B!");}}运行结果:Hello from A!Hello from B!在这个例子中,对象A的构造函数中,newB(this)把对象A作为参数传递给了对象B的构造函数。

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特殊表⽰当前对象⽆。

java中super()的用法

java中super()的用法

一、super()的概念在Java编程中,super()是一个关键字,用来调用父类的构造方法。

在子类中使用super()可以调用父类的构造方法,从而实现子类继承父类的属性和方法。

super()必须作为子类构造方法的第一条语句,如果不显式调用super(),则默认调用父类的无参构造方法。

二、super()的用法1. 调用父类的构造方法当子类实例化时,会先调用父类的构造方法,可以使用super()在子类构造方法中调用父类的构造方法。

例如:```javapublic class Parent {public Parent(){System.out.println("Parent类的构造方法");}}public class Child extends Parent {public Child(){super(); //调用父类的构造方法System.out.println("Child类的构造方法");}}在上述例子中,当实例化Child类时,会先调用Parent类的构造方法,然后再调用Child类的构造方法。

2. 访问父类的属性和方法在子类中使用super关键字可以访问父类的属性和方法。

例如:```javapublic class Parent {public String name = "parent";public void sayHello(){System.out.println("Hello, I'm "+ name);}}public class Child extends Parent {public String name = "child";public void sayHello(){super.sayHello(); //调用父类的sayHello方法System.out.println("My name is "+ name);}}在上述例子中,子类可以通过super关键字访问父类的属性和方法,实现对父类的继承和扩展。

java中的this和super的作用和异同和C++中调用父类的构造函数

java中的this和super的作用和异同和C++中调用父类的构造函数

java中的this和super的作⽤和异同和C++中调⽤⽗类的构造函数这⼏天看到类在继承时会⽤到this和super,这⾥就做了⼀点总结,与各位共同交流,有错误请各位指正~thisthis是⾃⾝的⼀个对象,代表对象本⾝,可以理解为:指向对象本⾝的⼀个指针。

this的⽤法在java中⼤体可以分为3种:1.普通的直接引⽤这种就不⽤讲了,this相当于是指向当前对象本⾝。

2.形参与成员名字重名,⽤this来区分:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17class Person {private int age = 10;public Person(){System.out.println("初始化年龄:"+age);}public int GetAge(int age){this.age = age;return this.age;}}public class test1 {public static void main(String[] args) {Person Harry = new Person();System.out.println("Harry's age is "+Harry.GetAge(12)); }}运⾏结果:初始化年龄:10Harry's age is 12可以看到,这⾥age是GetAge成员⽅法的形参,this.age是Person类的成员变量。

3.引⽤构造函数这个和super放在⼀起讲,见下⾯。

supersuper可以理解为是指向⾃⼰超(⽗)类对象的⼀个指针,⽽这个超类指的是离⾃⼰最近的⼀个⽗类。

super也有三种⽤法:1.普通的直接引⽤与this类似,super相当于是指向当前对象的⽗类,这样就可以⽤super.xxx来引⽤⽗类的成员。

2.⼦类中的成员变量或⽅法与⽗类中的成员变量或⽅法同名12 3 4 5 6 7 8 9 10 11 12 13class Country {String name;void value() {name = "China";}}class City extends Country {String name;void value() {name = "Shanghai";super.value(); //调⽤⽗类的⽅法 System.out.println(name);13 14 15 16 17 18 19 20 21 System.out.println(name);System.out.println();}public static void main(String[] args) { City c=new City();c.value();}}运⾏结果:ShanghaiChina可以看到,这⾥既调⽤了⽗类的⽅法,也调⽤了⽗类的变量。

在java中super的用途

在java中super的用途

在java中super的用途
在Java中,super是一个关键词,代表了父类对象的引用。

super可以在子类中使用,以调用父类的方法、构造函数和属性。

主要用途包括以下几个方面:
1. 调用父类的构造函数
在子类的构造函数中,可以使用super调用父类的构造函数。

这种情况通常发生在子
类需要在父类的基础上进行一些特定的初始化操作,或者需要传入一些父类的参数。

调用
父类的构造函数可以使用super(),并且必须是子类中的第一条语句。

3. 引用父类的属性
子类可以使用super来引用父类的属性。

这种情况通常发生在子类需要使用父类中的
某个属性作为基础,在此基础上进行一些特定的操作。

使用super的格式为super.属性名。

4. 提高程序的可维护性
使用super可以提高程序的可维护性,使得代码更加清晰简洁。

父类中的方法和属性
通常具有通用性和重复性,子类可以直接复用这些方法和属性,避免了重复的代码,并且
可以更加方便地进行程序的扩展。

5. 帮助实现多态
Java是一种面向对象的语言,多态是面向对象最重要的特征之一。

使用super可以帮助实现多态性。

当子类对象调用方法时,JVM首先在子类中查找方法,如果没有找到,就
会到父类中查找方法。

如果父类中也没有找到,那么会一直向上查找,直到找到Object类为止,这种机制就是多态性的体现。

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

通过用static来定义方法或成员,为我们编程提供了某种便利,从某种程度上可以说它类似于C语言中的全局函数和全局变量。

但是,并不是说有了这种便利,你便可以随处使用,如果那样的话,你便需要认真考虑一下自己是否在用面向对象的思想编程,自己的程序是否是面向对象的。

好了,现在开始讨论this&super这两个关键字的意义和用法。

在Java中,this通常指当前对象,super则指父类的。

当你想要引用当前对象的某种东西,比如当前对象的某个方法,或当前对象的某个成员,你便可以利用this来实现这个目的,当然,this的另一个用途是调用当前对象的另一个构造函数,这些马上就要讨论。

如果你想引用父类的某种东西,则非super莫属。

由于this与super有如此相似的一些特性和与生俱来的某种关系,所以我们在这一块儿来讨论,希望能帮助你区分和掌握它们两个。

在一般方法中
最普遍的情况就是,在你的方法中的某个形参名与当前对象的某个成员有相同的名字,这时为了不至于混淆,你便需要明确使用this关键字来指明你要使用某个成员,使用方法是“this.成员名”,而不带this的那个便是形参。

另外,还可以用“this.方法名”来引用当前对象的某个方法,但这时this就不是必须的了,你可以直接用方法名来访问那个方法,编译器会知道你要调用的是那一个。

下面的代码演示了上面的用法:
public class DemoThis{
private String name;
private int age;
DemoThis(String name,int age){
setName(name);
//你可以加上this来调用方法,像这样:
this.setName(name);但这并不是必须的setAge(age);
this.print(); br> }
public void setName(String name){
=name;//此处必须指明你要引用成员变量}public void etAge(int age){
this.age=age;}public void print(){
System.out.println("Name="+name+" ge="+age);
//在此行中并不需要用this,因为没有会导致混淆的东西}public static void main(String[] args){
DemoThis dt=new DemoThis("Kevin","22");
这段代码很简单,不用解释你也应该能看明白。

在构造函数中你看到用this.print(),你完全可以用print()来代替它,两者效果一样。

下面我们修改这个程序,来演示super的用法。

class Person{
public int c;
private String name;
private int age;
protected void setName(String name){
=name;}protected void setAge(int age){
this.age=age;}protected void print(){
System.out.println("Name="+name+" Age="+age);}}
public class DemoSuper extends Person{
public void print(){
System.out.println("DemoSuper:
");
super.print();}public static void main(String[] args){
DemoSuper ds=new DemoSuper();
ds.setName("kevin");
ds.setAge
(22);
ds.print();}}
在DemoSuper中,重新定义的print方法覆写了父类的print方法,它首先做一些自己的事情,然后调用父类的那个被覆写了的方法。

输出结果说明了这一点:
DemoSuper:
Name=kevin Age=22
这样的使用方法是比较常用的。

另外如果父类的成员可以被子类访问,那你可以像使用this一样使用它,用“super.父类中的成员名”的方式,但常常你并不是这样来访问父类中的成员名的。

在构造函数中构造函数是一种特殊的方法,在对象初始化的时候自动调用。

在构造函数中,this和super也有上面说的种种使用方式,并且它还有特殊的地方,请看下面的例子:
class Person{
public static void prt(String s){
System.out.println(s);}Person(){
prt("A Person.");}Person(String name){
prt("A person name is:
"+name);}}
public class Chinese extends Person{
Chinese(){
super(); //调用父类构造函数
(1)
prt("A chinese.");//
(4)}Chinese(String name){
super(name);//调用父类具有相同形参的构造函数
(2)
prt("his name is:
"+name);}Chinese(String name,int age){
this(name);//调用当前具有相同形参的构造函数
(3)
prt("his age is:
"+age);}public static void main(String[] args){
在这段程序中,this和super不再是像以前那样用“.”连接一个方法或成员,而是直接在其后跟
上适当的参数,因此它的意义也就有了变化。

super后加参数的是用来调用父类中具有相同形式的
构造函数,如1和2处。

this后加参数则调用的是当前具有相同参数的构造函数,如3处。

当然,在
Chinese的各个重载构造函数中,this和super在一般方法中的各种用法也仍可使用,比如4处,你
可以将它替换为“this.prt”(因为它继承了父类中的那个方法)或者是“super.prt”(因为它
是父类中的方法且可被子类访问),它照样可以正确运行。

但这样似乎就有点画蛇添足的味道
了。

最后,写了这么多,如果你能对“this通常指代当前对象,super通常指代父类”这句话牢记在
心,那么本篇便达到了目的,其它的你自会在以后的编程实践当中慢慢体会、掌握。

另外关于本
篇中提到的继承,请参阅相关Java教程。

相关文档
最新文档