【Java概念】继承(8)

继承:

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);
    }

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值