免网站域名注册,杭州制作网页与网站,wordpress 安装主题 无法调用图片和颜色,什么是网络营销渠道?网络营销渠道有何功能?this作为一个特殊的关键字#xff0c;它的规则如下#xff1a; 1.可以表示构造函数传递。this(a,b)表示调用另外一个构造函数。这里面的this就是一个特殊语法#xff0c;不是变量#xff0c;没有什么类型。 2.可以在一个类的非static成员内部使用#xff0c;表…this作为一个特殊的关键字它的规则如下 1.可以表示构造函数传递。this(a,b)表示调用另外一个构造函数。这里面的this就是一个特殊语法不是变量没有什么类型。 2.可以在一个类的非static成员内部使用表示当前这个对象。此时this就是一个final的普通变量它有静态类型就是这个类本身它有动态类型就是当前这个对象的类型。你可以对它调用成员函数把它传递给别的函数等。 super和this类似但是也有不同的地方 1.表示调用父类的构造函数。也是一个特殊语法不是变量没有什么类型。 2.可以在一个类的非static成员内部使用。比如super.method()。 但是注意这个super.method()只是长得跟some_var.method()一样一个语法糖而已。实质上super根本不是一个变量。 使用中有一些需要注意 1. 子类的构造函数如果要引用super的话必须把super放在函数的首位 class Base {Base() {System.out.println(Base);}
}public class Checket extends Base {Checket() {super();//调用父类的构造方法一定要放在方法的首个语句System.out.println(Checket);}public static void main(String argv[]) {Checket c new Checket();}
} 如果想用super继承父类构造的方法但是没有放在第一行的话那么在super之前的语句肯定是为了满足自己想要完成某些行为的语句但是又用了super继承父类的构造方法。那么以前所做的修改就都回到以前了就是说又成了父类的构造方法了。 2.在Java中有时还会遇到子类中的成员变量或方法与父类中的成员变量或方法同名。因为子类中的成员变量或方法名优先级高所以子类中的同名成员变量或方法就隐藏了父类的成员变量或方法但是我们如果想要使用父类中的这个成员变量或方法就需要用到super。 class Country {String name;void value() {name China;}
}class City extends Country {String name;void value() {name Hefei;super.value();//不调用此方法时super.name返回的是父类的成员变量的值nullSystem.out.println(name);System.out.println(super.name);}public static void main(String[] args) {City cnew City();c.value();}
} 为了在子类中引用父类中的成员变量name和方法value()在代码中使用了super、super.name和super.value(),若不调用super.value()时super.name返回父类成员变量默认值null,调用此方法时super.value()方法把成员变量name赋值为China,再利用super.name调用父类的成员变量的值。 3用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(); // 调用父类构造函数1prt(A chinese.);// (4)}Chinese(String name) {super(name);// 调用父类具有相同形参的构造函数2prt(his name is: name);}Chinese(String name, int age) {this(name);// 调用当前具有相同形参的构造函数3prt(his age is: age);}public static void main(String[] args) {Chinese cn new Chinese();cn new Chinese(kevin);cn new Chinese(kevin, 22);}} 结果为 A Person. A chinese. A person name is:kevin his name is:kevin A person name is:kevin his name is:kevin his age is:22 在这段程序中this和super不再是像以前那样用“.”连接一个方法或成员而是直接在其后跟上适当的参数因此它的意义也就有了变化。super后加参数的是用来调用父类中具有相同形式的构造函数如1和2处。this后加参数则调用的是当前具有相同参数的构造函数如3处。当然在Chinese的各个重载构造函数中this和super在一般方法中的各种用法也仍可使用比如4处你可以将它替换为“this.prt”(因为它继承了父类中的那个方法或者是“super.prt”因为它是父类中的方法且可被子类访问它照样可以正确运行。 4super和this的异同 super参数调用基类中的某一个构造函数应该为构造函数中的第一条语句 this参数调用本类中另一种形成的构造函数应该为构造函数中的第一条语句super:它引用当前对象的直接父类中的成员用来访问直接父类中被隐藏的父类中成员数据或函数基类与派生类中有相同成员定义时如super.变量名 super.成员函数据名实参this它代表当前对象名在程序中易产生二义性之处应使用this来指明当前对象如果函数的形参与类中的成员数据同名这时需用this来指明成员变量名调用super()必须写在子类构造方法的第一行否则编译不通过。每个子类构造方法的第一条语句都是隐含地调用super()如果父类没有这种形式的构造函数那么在编译的时候就会报错。super()和this()类似,区别是super()从子类中调用父类的构造方法this()在同一类内调用其它方法。super()和this()均需放在构造方法内第一行。尽管可以用this调用一个构造器但却不能调用两个。this和super不能同时出现在一个构造函数里面因为this必然会调用其它的构造函数其它的构造函数必然也会有super语句的存在所以在同一个构造函数里面有相同的语句就失去了语句的意义编译器也不会通过。this()和super()都指的是对象所以均不可以在static环境中使用。包括static变量,static方法static语句块。从本质上讲this是一个指向本对象的指针, 然而super是一个Java关键字。 转自 Java中super的几种用法并与this的区别