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

java基础_day0022_java关键字_this_super_构造器_子类对象实例化

2017-03-21 09:29 211 查看
super 关键字

调用 父类中和子类中 重名的 属性 和方法 调用父类的属性和方法 用super.关键字 调用子类中的属性和方法用this.

如果只有父类和子类中的属性或者方法不同名 则可以省略关键字 或者用this. 或者super.都可以。

如果 子类重写 父类的方法 之后 还想调用父类的方法, 直接用super.的形式去显示调用父类的方法, 直接写方法名或者 this.方法名的形式来调用重写父类之后的方法。

super(形参列表)形容构造器 也必须在构造器首行。 this(形参列表)

父类:

package day08_03;

public class Person {
private int age;
private String name;
protected int id; //父类的id
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}


子类:

package day08_03;

/**
* Worker 继承 Person 父类  有重复属性  id
*
* this.id 调用子类的id 属性
* super.id 调用父类的id 属性
* @author Administrator
*
*/
public class Worker extends Person{
private  int id; //子类的id
private  String desc;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
public Worker() {
super();
}

public  void eat(){
this.id=123;
super.id=555555;

System.out.println(this.id+":"+super.id);

}

}


测试类

子类的实例化过程

在new 子类对象时 除了子类本身的属性外, 在调用子类的构造器时 ,默认调用suer()构造器 同时把父类的属性带入子类对象中。

package day08_03;

/**
* 子类的实例化过程
*
* 在new 子类对象时  除了子类本身的属性外,  在调用子类的构造器时 ,默认调用suer()构造器 同时把父类的属性带入子类对象中。
*
* @author Administrator
*
*/
public class TestWorker {
public static void main(String[] args) {
Worker w = new Worker();
w.eat();

}
}


子类对象的实例化过程

当前类中的构造器中 如果有N个构造器 最多可以有N-1个 this(形参列表);语句来调用其他的构造器 【this语句必须在构造器的首行】。

最后一个 无 this(形参列表); 的构造器 首行 默认有super(形参列表); 语句来调用其继承父类的构造器 ,

利用父类的构造器 来加载父类具有的属性和方法,【由于有权修饰符限问题,有的属性和方法 子类能够加载 ,确无法调用 使用 】 当前类如果无显式继承的父类 那么继承其 顶级父类Object

Object 类中通过API观察得知 只有 构造器 、方法 无具体属性 。

package day08_05;

/**
* 子类对象的实例化过程
* 当前类中的构造器中  如果有N个构造器 最多可以有N-1个   this(形参列表);语句来调用其他的构造器 【this语句必须在构造器的首行】。
* 最后一个 无 this(形参列表); 的构造器       首行   默认有super(形参列表); 语句来调用其继承父类的构造器 ,
* 利用父类的构造器 来加载父类具有的属性和方法,【由于有权修饰符限问题,有的属性和方法  子类能够加载 ,确无法调用  使用 】  当前类如果无显式继承的父类 那么继承其顶级父类Object
* Object 类中通过API观察得知 只有 构造器   、方法  无具体属性 。
*
* @author Administrator
*
*/
public class TestDog {
public static void main(String[] args) {
Dog dog = new Dog();
//		调用当前dog对象的属性  +  继承父类的属性+ 父类的父类方法+ 顶级父类Object的 toString()方法
System.out.println(dog.getAge()+"--"+dog.getHostName()+":"+dog.getName()+"\t"+dog.toString());
}
}

class Creator{
private  String name;

public Creator() {
//		实例化当前对象时默认调用父类的空参构造器,默认继承object父类
//		super 修饰构造器 跟this关键字一样 必须放在构造器的首行。
super();
this.name="小花狗";
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

}

class Animal extends Creator{
private int age;

public Animal() {
super();
this.age = 5;
}

public Animal(int age) {
super();
this.age = age;
}

public int getAge() {
return age;
}

public void setAge(int age) {
this.age = age;
}

}

class  Dog extends  Animal{
private String hostName;

public Dog() {
super(5);
this.hostName="miss  ming";
}

public String getHostName() {
return hostName;
}

public void setHostName(String hostName) {
this.hostName = hostName;
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: