导航:首页 > 安装方法 > 构造类里面的super方法指向哪里

构造类里面的super方法指向哪里

发布时间:2022-06-23 18:34:45

1. java构造方法里的super和this问题

一、this
Java关键字this只能用于方法方法体内。当一个对象创建后,Java虚拟机(JVM)就会给这个对象分配一个引用自身的指针,这个指针的名字就是this。因此,this只能在类中的非静态方法中使用,静态方法和静态的代码块中绝对不能出现this,这在“Java关键字static、final使用总结”一文中给出了明确解释。并且this只和特定的对象关联,而不和类关联,同一个类的不同对象有不同的this。下面给出一个使用this的综合实例,以便说明问题:

package org.leimin;
public class Test6 {
private int number;
private String username;
private String password;
private int x = 100;
public Test6(int n) {
number = n; // 这个还可以写为: this.number=n;
}
public Test6(int i, String username, String password) {
// 成员变量和参数同名,成员变量被屏蔽,用"this.成员变量"的方式访问成员变量.
this.username = username;
this.password = password;
}
// 默认不带参数的构造方法
public Test6() {
this(0, "未知", "空"); // 通过this调用另一个构造方法
}
public Test6(String name) {
this(1, name, "空"); // 通过this调用另一个构造方法
}
public static void main(String args[]) {
Test6 t1 = new Test6();
Test6 t2 = new Test6("游客");
t1.outinfo(t1);
t2.outinfo(t2);
}
private void outinfo(Test6 t) {
System.out.println("-----------");
System.out.println(t.number);
System.out.println(t.username);
System.out.println(t.password);
f(); // 这个可以写为: this.f();
}
private void f() {
// 局部变量与成员变量同名,成员变量被屏蔽,用"this.成员变量"的方式访问成员变量.
int x;
x = this.x++;
System.out.println(x);
System.out.println(this.x);
}

//返回当前实例的引用
private Test6 getSelf() {
return this;
}
}

运行结果如下:

-----------
0
未知

100
101
-----------
0
游客

100
101

看着上面的例子,说明在什么情况下需要用到this:
第一、通过this调用另一个构造方法,用发是this(参数列表),这个仅仅在类的构造方法中,别的地方不能这么用。
第二、函数参数或者函数中的局部变量和成员变量同名的情况下,成员变量被屏蔽,此时要访问成员变量则需要用“this.成员变量名”的方式来引用成员变量。当然,在没有同名的情况下,可以直接用成员变量的名字,而不用this,用了也不为错,呵呵。
第三、在函数中,需要引用该函所属类的当前对象时候,直接用this。
其实这些用法总结都是从对“this是指向对象本身的一个指针”这句话的更深入的理解而来的,死记不然容易忘记而且容易搞错,要理解!

二、super

super关键和this作用类似,是被屏蔽的成员变量或者成员方法或变为可见,或者说用来引用被屏蔽的成员变量和成员成员方法。
不过super是用在子类中,目的是访问直接父类中被屏蔽的成员,注意是直接父类(就是类之上最近的超类)。下面是一个综合运用super的例子,有两个类:一个Father类,一个Father类的子类Son,通过这两个类完全演示了super的用法,一下是代码:

package org.leimin;
public class Father {
public String v="Father";
public String x="输出了Father类的public成员变量x!!!";

public Father() {
System.out.println("Father构造方法被调用!");
}

public Father(String v){
this.v="Father类的带参数构造方法!运行了.";
}
public void outinfo(){
System.out.println("Father的outinfo方法被调用");
}
public static void main(String[] args) {
// TODO 自动生成方法存根
}
}

package org.leimin;
public class Son extends Father{
public String v="Son";

public Son() {
super(); //调用超类的构造方法,只能放到第一行.
System.out.println("Son无参数构造方法被调用!");
//super(); //错误的,必须放到构造方法体的最前面.
}

public Son(String str){
super(str);
System.out.println("Son带参数构造方法被调用!");
}
//覆盖了超类成员方法outinfo()
public void outinfo(){
System.out.println("Son的outinfo()方法被调用");
}

public void test(){

String v="哈哈哈哈!"; //局部变量v覆盖了成员变量v和超类变量v

System.out.println("------1-----");
System.out.println(v); //输出局部变量v
System.out.println(this.v); //输出(子类)成员变量v
System.out.println(super.v); //输出超类成员变量v

System.out.println("------2-----");
System.out.println(x); //输出超类成员变量v,子类继承而来
System.out.println(super.x); //输出超类成员变量v

System.out.println("------3-----");
outinfo(); //调用子类的outinfo()方法
this.outinfo(); //调用子类的outinfo()方法
super.outinfo(); //调用父类的outinfo()方法
}

public static void main(String[] args) {
new Son().test();

}
}

2. JAVA中super的作用

super可作用是向自己超(父)类对象的一个指针,而这个超类指的是离自己最近的一个父类。

super也有三种用法:

1、普通的直接引用

与this类似,super相当于是指向当前对象的父类,这样就可以用super.xxx来引用父类的成员。

2、子类中的成员变量或方法与父类中的成员变量或方法同名。

3、引用构造函数

super(参数):调用父类中的某一个构造函数(应该为构造函数中的第一条语句)。

this(参数):调用本类中另一种形式的构造函数(应该为构造函数中的第一条语句)。

(2)构造类里面的super方法指向哪里扩展阅读

super使用

示例:

class Country {

String name;

void value() {

name = "China";

}

}

class City extends Country {

String name;

void value() {

name = "Shanghai";

super.value(); //调用父类的方法

System.out.println(name);

System.out.println(super.name);

}

public static void main(String[] args) {

City c=new City();

c.value();

}

}

3. 分别阐述关键字super和this在java语言中的用法分别说明重载和重写的要求是什么

this表示自己本身,super表示父类。对象没有写extends时,表示Object。默认都继承Object的。继承某个类时。则表式所继承的类。
this是用来调用本类方法或属性的。
super是用来调用父类的方法及属性的。
1.重写必须继承,重载不用。
2.重写的方法名,参数数目相同,参数类型兼容,返回值相同,重载的方法名相同,参数列表不同,返回值也可以不同。
3.重写的方法修饰符大于等于父类的方法,重载和修饰符无关。
4.重写不可以抛出父类没有抛出的一般异常,可以抛出运行时异常

4. java中super是在哪个类里面

子类的构造函数如果要引用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继承父类的构造方法。那么以前所做的修改就都回到以前了,就是说又成了父类的构造方法了。

5. Java里面super关键字是在子类对象内部指代其父类对象的引用吗

是的。
1、super调用基类中的某一个构造函数
2、super引用当前对象的直接父类中的成员(用来访问直接父类中被隐藏的父类中成员数据或函数,基类与派生类中有相同成员定义时如:super.变量名 super.成员函数据名(实参)

6. 为什么这里在构造方法里面要写super呢它继承的是自类的父类

我来解释:
如果你想用super继承父类构造的方法
但是没有放在第一行的话
那么在super之前的语句
肯定是为了满足你自己想要完成某些行为的语句
但是你又用了super继承父类的构造方法
那么以前所做的修改就都回到以前了
...

阅读全文

与构造类里面的super方法指向哪里相关的资料

热点内容
在低电压中常用的熄弧方法有哪些 浏览:634
国风包装设计研究方法 浏览:602
宁波工程钢筋除锈剂方法有哪些 浏览:949
胯围测量正确方法图片 浏览:975
疤痕妊娠怎么治疗方法 浏览:966
旅游心理学研究的主要方法有 浏览:557
如何用简单方法制作生根水 浏览:833
宝宝不拉大便有什么好方法 浏览:729
染发黑色的正确方法和步骤 浏览:894
施工安全带使用方法 浏览:930
顽固口臭的治疗方法 浏览:821
爪爪机的使用方法 浏览:286
坐月子疼痛正确方法 浏览:464
量内衣的正确方法图片 浏览:995
量角器的使用方法视频 浏览:677
如何改善屁股两边冰凉的方法 浏览:598
山东济南肿瘤医院癌症治疗方法 浏览:40
教你如何做冰激凌简单的方法 浏览:869
骨关节炎检查方法有哪些 浏览:771
取小标题的方法技巧 浏览:978