子类实例化父类以及super关键字的一些小结与分析

   一、 在Java类中使用super来引用父类的成分

1.super可用于访问父类中定义的属性。

 

2.super可用于调用父类中定义的成员方法。

 

3.super可用于在子类构造方法中调用父类的构造方法。

 

4.super的追溯不仅限于直接父类。

 

举个例子:

  父类:

 public class Person {
	private String name;
    	private int age;
	public String getInfo() {
        	           return "Name: " + name + "\nage: " + age;
    	}
   }

  子类:

public class Student extends Person {
    	private String school = "New Oriental";
	public String getSchool(){ return school; }
    	public String getInfo() {
       	                  // 调用父类的方法
        	           return super.getInfo() +"\nschool: " +school;
    	}
   }

  入口函数类:

public class DiaoY {
  
	
	public static void main(String[] args){
	   
	   Person p=new Person();
	   Student s=new Student();
	  System.out.println("父类信息:\n"+p.getInfo());
	  System.out.println("子类信息:\n"+s.getInfo()+"\n学生的学校:\n"+s.getSchool());
   }
}

 

运行的结果:

父类信息

Name: 李雷

age: 30

子类信息

Name: 李雷

age: 30

school: New Oriental

学生的学校

New Oriental

 

  二、 super关键字在构造方法上面的一些总结:

 

1.子类继承父类所有的成员变量和成员方法,但不继承父类的构造方法。

 

2.在一个Java类中可以通过两种方式获得构造方法:

(1)使用系统默认的无参数构造方法。

(2)显式定义一个或多个构造方法。

   

 (注意:一旦显式定义了构造方法,则系统不再提供默认构造方法。)

 

3.在子类的构造方法中可使用super(参数列表)语句调用父类的构造方法。

 

4.如果子类的构造方法中没有显示地调用父类构造方法,也没有使用this关键字调用重载的其它构造方法,则系统默认调用父类无参数的构造方法。

 

5.如果子类构造方法中既未显式调用父类构造方法,而父类中又没有无参的构造方法,则编译出错。

 

下面有个比较简单的例子去分析:

 

public class Person {
 	
 	private String name;
 	private int age;
	private Date birthDate;	

 	public Person(String name, int age, Date d) {
 	        this.name = name;	        this.age = age;
	        this.birthDate = d;
            	}
 	public Person(String name, int age) {
 	        this(name, age, null);
 	}	public Person(String name, Date d) {
 	        this(name, 30, d); 
       }
	public Person(String name) {
	        this(name, 30);
	} 	// ……
   }

 

 public class Student extends Person {
 	private String school;

 	public Student(String name, int age, String s) {
 	         super(name, age);
 	         school = s;
 	}
 	public Student(String name, String s) {
 	          super(name);
	          school = s;
	}
         public Student(String s) { 
           
	          school = s;// 编译出错: no super(),系统将调用父类无参数的构造方法。
 	}
     }

    

 这里是子类对象实例化的过程:

  
子类实例化父类以及super关键字的一些小结与分析_第1张图片
 

以上就是我对子类实例化父类的一些理解和总结。

 

你可能感兴趣的:(super)