super 关键字
调用 父类中和子类中 重名的 属性 和方法 调用父类的属性和方法 用super.关键字 调用子类中的属性和方法用this.
如果只有父类和子类中的属性或者方法不同名 则可以省略关键字 或者用this. 或者super.都可以。
如果 子类重写 父类的方法 之后 还想调用父类的方法, 直接用super.的形式去显示调用父类的方法, 直接写方法名或者 this.方法名的形式来调用重写父类之后的方法。
调用 父类中和子类中 重名的 属性 和方法 调用父类的属性和方法 用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;
}
}