您的位置:首页 > 编程语言 > Java开发

java,this和super使用实例

2016-03-22 11:39 501 查看
class Creature {

public Creature() {
System.out.println("A");
}
}

// //////////
class Animal extends Creature {
public Animal(String name) {
System.out.println("B");
}
public Animal(String name, int age) {
this(name);/////调用自己其他的构造函数
System.out.println("C");
}

}

// ////////////////
public class Dog extends Animal {
public Dog() {
super("Dog", 10);
System.out.println("D");
}
public static void main(String[] args) {
new Dog();
}

}
///每当你new一个子类对象的时候,子类对象都隐式内置了一个父类对象。
//输出:
//A
//B
//C
//D
---------------------------------------------------------------------------


class JavanTiger {
int age;      // 年龄
int hight;    // 身体高度

public JavanTiger() {
print();
this.age=2;   //这里初始化 age 的值 ,但递归返回的时候,这个值会被覆写
}

public JavanTiger(int age) {
this();      // 调用自己的第一个构造函数,下面的两个语句数不执行的
this.age = age;
print();
}

public JavanTiger(int age, int hight) {
this(age);   // 调用自己第二个构造函数  ,下面的两个语句数不执行的
this.hight = hight;
print();
}

public void print() {  //打印函数
System.out.println("I'am a " + age + "岁 " + hight + "尺高 tiger!");
}
public static void main(String[] args) {
new JavanTiger(3,3);
}
}
//output
//I'am a 0岁 0尺高 tiger!
//I'am a 3岁 0尺高 tiger!
//I'am a 3岁 3尺高 tiger!

-------------------------------------------------------------------------------------------------------------------------------------------

class Tiger {
int age; // 年龄
int hight; // 身体高度

public Tiger() {
print();
}
public Tiger(int age) {
this.age = age;
print();
}
public void print() {
System.out.println("I'am a " + age + "岁 " + hight + "尺高 tiger!");
}
}
public class JavanTiger extends Tiger {
public JavanTiger() {
//	super();
//   super(1);    // 调用父类无参数的构造函数
}
public static void main(String[] args) {
new JavanTiger();
}
}
//I'am a 0岁 0尺高 tiger!
/*
如果是:
public JavanTiger() {
//	super();
//   super(1);    // 调用父类无参数的构造函数,输出I'am a 0岁 0尺高 tiger!
}
如果是:
public JavanTiger() {
super();
//   super(1);    // 调用父类无参数的构造函数,输出I'am a 0岁 0尺高 tiger!
}
如果是:
public JavanTiger() {
//super();
super(1);    // 调用父类有参数的构造函数,输出I'am a 1岁 0尺高 tiger!
}

*/


1)有人写了个很好的初始化属性的构造函数,而你仅仅想要在其中添加另一些自己新建属性的初始化,这样在一个构造函数中调用另外一个构造函数,可以避免重复的代码量,减少工作量;

2)在一个构造函数中调用另外一个构造函数的时候应该用的是同一块内存空间,在默认的构造函数中先初始化变量,调用另一个的时候覆写已经初始化的变量的值;

3)整个调用的过程和递归调用函数有点类似,不断充气球,直到整个气球膨胀起来,不断的深层递进,遇到停止标记,逐层的跳出来。

所以简单的总结了一下,“this()是调用自己其他的构造函数,super()是调用自己继承的父类的构造函数“,如果只想调用默认无参数的父类构造函数,不用在子类的构造函数当中写出来,但是实际编程的时候,总是会忽略这一点。

 那门这两个关键字能不能同时出现在子类的一个构造函数当中纳?答案肯定是不能,

1)在新建一个基类的时候,不论递归调用几次自身的构造函数,最终你都会去调用父类的构造函数,(不是显式调用的话,系统会调用默认无参数的父类构造函数);

2)JAVA 中规定使用 this 和 super 时必须放在构造函数第一行,只有一个第一行;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java this super