【Java概念】继承(8)

来源:互联网 发布:sam smith 知乎 编辑:程序博客网 时间:2024/06/10 06:02

继承:

package cn.hncu.program.extends_;import org.junit.Test;/** * 项目名:继承类 * 时间 :2017-9-12 上午10:35:04 *  * 1.测试子类调用父类的构造方法来为父类初始化成员变量。 *  */public class Extends {    @Test    public void t1(){        //Person p = new Person();        Student s = new Student("Jack", 22, 50.1, "Java", 1.0);        System.out.println(s);        //System.out.println(p);    }     @Test    public void t2(){        Student s = new Student();    }}class Person{//默认继承Object类,因此可以在任何类中默认使用Object类的方法。    private String name = "Jack";    private int age;    private double weight;    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public int getAge() {        return age;    }    public void setAge(int age) {        this.age = age;    }    public double getWeight() {        return weight;    }    public void setWeight(double weight) {        this.weight = weight;    }    /*     * 1.空参构造方法,如果写了空参构造方法,系统不会给我们再加默认空参构造方法,     *   如果没有写空参构造方法及其有参构造方法,系统会自动帮我们加上默认空参构造方法。     */     public Person() {        /*         * 2.【super】的意思是:当前的类调用其父类的构造方法。此时调用父类Object类         * 3.子类构造方法中,如果我们不显式用super(...)调用父类构造方式,Java会帮我们加.         * 4.这一句可以省略,这是构造一个Object对象,即使不写系统会帮我们自动加上的。         * 5.super();是调用父类空参方法,super带参数是表示调用父类带参数构造方法。         * 6.不能在静态方法中使用super。         *          */        super();    }    public Person(String name, int age, double weight) {        super();        this.name = name;        this.age = age;        this.weight = weight;    }    /*【覆盖方法】:     * 1.覆盖:子类中和父类相同的方法(相同的方法名和参数列表)。     * 2.非静态的方法不能覆盖父类的静态方法。     * 3.覆盖方法:方法名和参数列表必须和父类的一致,返回类型也必须和父类的一致。     * 4.子类覆盖方法的约束: 前不能小,后不能大。     *   子类方法的权限不能低于父类的;     *   子类方法抛出的异常不能比父类大;     *      * 【子类覆盖父类的成员方法】:     * 1.子类覆盖父类方法,既可以完全重写,也可以扩展父类方法的功能。     * 2.覆盖父类方法时,子类方法的访问权限不能小于父类方法的访问权限。     * 3.覆盖表现为父类与子类之间方法的多态性。     *   程序运行时,究竟执行覆盖同名方法中的哪一个,取决于调用与该方法的对象所属的类是父类还是子类。     * 4.即父类调用父类的成员方法,子类对象调用子类的成员方法。       *      * 【子类重载父类成员方法】:     * 1.子类重定义了父类成员方法,如果参数列表不同,,则子类重载了继承来的该成员方法。     * 2.当子类成员方法仅重载而没有覆盖父类同名成员方法时,重载的多个同名成员方法之间能够     *   通过调用时的实际参数而相互区别,不需要使用super引用。     */    public String toString(){        return name+","+age+","+weight;    }}/* * 【extends的特性】: * 1.子类可以继承父类的非private类型的成员变量和普通成员方法。 *  */class Student extends Person{    private String speciality;    /*     * 【隐藏父类成员变量】:     * 1.子类中的成员变量和父类中的成员变量完全相同的时候,此时隐藏了父类的成员变量。     */    private String name="Rose";    public String getSpeciality() {        return speciality;    }    public void setSpeciality(String speciality) {        this.speciality = speciality;    }       /*     * 【注意】:     * 1.this和super不能同时存在。     * 2.super是可以调用父类的构造方法,this是可以调用子类的构造方法。     * 3.因此调用this会屏蔽掉super调用父类构造方法。     */    public Student() {        this("Jack", 2, 20.1, "1", 1.1);        //super();    }    /*     * 【用子类的构造方法为父类成员变量初始化值】:     * version为构造方法的版本号     */    //方式一:调用父类的setter方法进行设置值:    public Student(String name,int age,double weight,String speciality,int version){        /*【子类中的this、super】:         * 1.对于子类中的this.成员变量/成员方法:先到子类中找,若没有就到父类中找,找到即调用。         * 2.对于子类中的super.成员变量/成员方法:直接到指定的父类中调用。----super.setWeight(weight)         * 3.访问父类的成员:super.成员变量名 或super.成员方法名(....)         * 4.访问父类的构造方法:super(....)         *          */        this.setName(name);        this.setAge(age);        //this.setWeight(weight);        super.setWeight(weight);        this.setSpeciality(speciality);    }    //方式二:直接用super调用父类的构造方法:    public Student(String name,int age,double weight,String speciality,double version){        //super();        super(name, age, weight);        this.setSpeciality(speciality);    }}
原创粉丝点击