继承相关
分类:java programme日期:2011-11-22作者:wikier.ren
package com.iwikier.jichengzuoye;
public class Person {
private String name;
private String gendar;
private int age;
//无参构造方法中,也可以加入赋值语句对对象进行初始化的;
public Person(){
this.gendar = “nan”;
}
public Person(String g){
this.gendar = g;
}
public Person(String n, String g, int a){
this.name = n;
this.gendar = g;
this.age = a;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getGendar() {
return gendar;
}
public void setGendar(String gendar) {
this.gendar = gendar;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public void print(){
System.out.println(“名字:” + this.name + “\n性别:” + this.gendar + “\n年龄:” + this.age);
}
}
package com.iwikier.jichengzuoye;
//在做继承是父类必须有默认构造方法
public class Student extends Person{
private String nianji; //调用父类方法不能显示该属性,因此如果从父类继承的方法不能满足子类的需求,在子类中可以对父类的 同名方法 重写
public Student(){
this.nianji = “gaoshan”;
}
//一个参数的构造方法
public Student(String ni){
//用super调用父类是,一定要放在第一行,否则会报错
//用super.是无法调用父类的构造方法的,因此要用如下的方式:
super(“nv”); //执行父类中相应的有参构造方法,而不调用父类中无参构造方法
this.nianji = ni;
}
/*
* 继承条件下构造方法的三条规则
* 1.如果子类的构造方法中没有通过super显示调用父类的有参构造方法,也没有通过this显示调用自身的其他构造方法,则系统会默认先调用父类的无参构造方法;
* 2.如果子类的构造方法中显示调用父类的有参构造方法,那就执行父类的相应构造方法,而不执行父类的无参构造方法;
* 3.如果子类的构造方法中通过this显示调用自身的其他构造方法,在相应构造方法中应用以上两条规则
*
* 在类中显示创建有参构造方法,那么系统就不会自动创建无参构造方法,若要使用,则需要主动创建无参构造方法
*/
public Student(String n, String g, int a, String ni){
super(n,g,a);
this.nianji = ni;
}
public String getNianji() {
return nianji;
}
public void setNianji(String nianji) {
this.nianji = nianji;
}
//方法重写,也称方法覆盖,是子类中根据需求对父类继承的方法进行重新编写
/*
* 方法重写必须满足的几个要求:
* 1.必须具有相同的方法名;
* 2.必须具有相同的参数列表;
* 3.返回值类型必须相同或者是其子类型;
* 4.不能缩小被重写方法的权限。
*
* 重写也可以使用source override methods进行方法重写
* 方法经重写后优先执行重写后的方法
*/
public void print(){
super.print(); //用于保留父类的方法; super代表当前对象对直接父类对象的默认引用
//super必须出现在子类中(子类的方法和构造方法中),而不是其他位置;
//super用以访问父类成员,例如父类的属性,方法,构造方法;
//super有访问权限限制,无法访问父类的private成员
System.out.println(“年级:” + this.nianji + “\n”); //只是增加父类中方法要输出的内容
}
}
package com.iwikier.jichengzuoye;
public class Teacher extends Person{
private String kemu;
public Teacher(String n, String g, int a, String k){
super(n,g,a);
this.kemu = k;
}
public String getKemu(){
return this.kemu;
}
public void setKemu(String kemu){
this.kemu = kemu;
}
@Override
public void print() {
// TODO Auto-generated method stub
super.print();
System.out.println(“教学科目:” + this.kemu + “\n”);
}
}
package com.iwikier.jichengzuoyetest;
import com.iwikier.jichengzuoye.*;
public class PersonTest {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Student li = new Student(“litao”, “nan”, 12, “gaosan”);
li.print();
Teacher wang = new Teacher(“wang dong”, “nv”, 28, “maths”);
wang.print();
//由此可以说明,在调用子类无参情况下,系统也会默认去调用父类无参的构造方法,因此显示创建无参构造方法是必要的。
Student xtest = new Student();
System.out.println(xtest.getNianji());
System.out.println(xtest.getGendar());
//一个参数对象的测试
Student xtest1 = new Student(“dayi”);
System.out.println(xtest1.getNianji());
System.out.println(xtest1.getGendar());
}
}
暂时没有评论!