this能出现在实例方法中和构造方法中,this语法是:“this.”“this()”,this不能使用在静态方法中,this在大部分情况下可以省略,但是在区分局部变量和实例变量的时候不能省略,例如:
public void doSome(String name){
this.name = name;
}
this()只能出现在构造方法第一行,通过当前的构造方法去调用“本类”中的其它的构造方法,目的是代码复用super能出现在实例方法中和构造方法中,super语法是:“super.”“super()”,super不能使用在静态方法中,this在大部分情况下可以省略,但是在区分局部变量和实例变量的时候不能省略
super()只能出现在构造方法第一行,通过当前的构造方法去调用“父类”中的其它的构造方法,目的是代码复用
public class Test{
public static void main(String[] args){
// 创建子类对象
new B();
/*A类的无参数构造方法
B类的无参数构造方法*/
}
}
class A{
public A(){
System.out.println("A类的无参数构造方法");
}
}
class B extends A {
super(); //默认存在
public B(){
System.out.println("B类的无参数构造方法");
}
}
一个类如果没有手动提供任何构造方法,系统会默认提供一个无参数的构造方法
一个类如果手动提供了一个构造方法,那么无参数构造系统不再提供
当一个构造方法第一行,既没有this(),又没有super()的话,默认会有一个super(),表示必须保证父类的无参数构造方法是存在的public class Test{
public static void main(String[] args){
new B();
/*A类的有参数参数构造方法
B类的无参数构造方法*/
}
}
class A{
public A(){
System.out.println("A类的无参数参数构造方法");
}
public A(int i){
System.out.println("A类的有参数参数构造方法");
}
}
class B extends A {
public B(){
super(1);
System.out.println("B类的无参数构造方法");
}
}
this()和super()不能共存,它们都是只能出现在构造方法的第一行在java语言中,不管是new什么对象,最后老祖宗的Object类的无参数构造方法一定会执行,Object类的无参数构造方法处于栈顶部,所以会最先输出
public class Test{
public static void main(String[] args){
B b = new B("鳄鱼君");
b.doSome();
}
}
class A{
String name;
public A(){}
public A(String name){
this.name = name;
}
}
class B extends A{
public B(){}
public B(String name){
super(name);
}
public void doSome(){
// this表示当前对象
System.out.println(this.name + "在干什么事");
// super表示的是当前对象的父类型特征,super是this指向的呢个对象中的一块空间
System.out.println(super.name + "在干什么事");
// 默认是this.name
System.out.println(name + "在干什么事");
}
}
this.和super.大部分情况下都可以省略,但是如果父中有,子中也有,想在子中访问父的特征,super.不能省略public class Test{
public static void main(String[] args){
B b = new B("鳄鱼君");
b.doSome();
}
}
class A{
String name;
public A(){}
public A(String name){
this.name = name;
}
}
class B extends A{
// 假设子类也有一个同名属性
String name;
public B(){}
public B(String name){
super(name);
// this.name = null;
}
public void doSome(){
// this表示当前对象
System.out.println(this.name + "在干什么事");//null
// super表示的是当前对象的父类型特征,super是this指向的呢个对象中的一块空间
System.out.println(super.name + "在干什么事");
// 默认是this.name
System.out.println(name + "在干什么事");//null
}
}
super不是引用,super也不保存内存地址,super也不指向任何对象,super只是代表当前对象内部的呢一块父类型的特征,所以不能单独使用super:public class Test{
public void doSome(){
// 输出当前对象的内存空间
System.out.println(this);
// 编译报错
System.out.println(super);
}
public static void main(String[] args){
Test b = new Test();
b.doSome();
}
}
this和super不能使用在静态方法中!声明:1. 本站所有资源来源于用户上传和网络,因此不包含技术服务请大家谅解!如有侵权请邮件联系客服!
2. 本站不保证所提供下载的资源的准确性、安全性和完整性,资源仅供下载学习之用!如有链接无法下载、失效或广告,请联系客服处理!
3. 您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容资源!如用于商业或者非法用途,与本站无关,一切后果请用户自负!
2. 本站不保证所提供下载的资源的准确性、安全性和完整性,资源仅供下载学习之用!如有链接无法下载、失效或广告,请联系客服处理!
3. 您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容资源!如用于商业或者非法用途,与本站无关,一切后果请用户自负!