继承的相关概念

package cn.learn.extend;

/*
   定义一个父类
 */
public class Employee {

    int num=20;
    private int age;
    private String name;

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

    public Employee(int age, String name) {
        this.age = age;
        this.name = name;
    }

    public Employee() {
    }

    public void method(){
        System.out.println("我来自父类!!");
    }
}
package cn.learn.extend;

/*
1.  由Employee生成的子类
    注意:在子类创建的成员变量/成员方法与父类变量重名时
    访问有两种方式(非private成员变量时)
    直接:通过子类对象访问成员变量/成员方法(构造方法除外)
            等号左边是谁就优先用谁,若没有则继续往上找,绝不会向下找(即对象是哪个类生成的就取谁的)
    间接:通过成员方法访问成员变量

2.重写(override):在继承关系中,形参参数列表一样,方法名一样,覆盖掉父类
  重载(overload):方法名称一样,参数列表不一样

3.重写注意事项:子类方法的返回值必须【小于等于】父类方法的返回值
  扩展提示:java.lang.Object类是所有类的公共最高父类(祖宗类),java.lang.String就是Object的类

4.重写注意事项:子类方法的权限(修饰符)必须【大于等于】父类权限
  扩展提示:public > protected > (default) > private(??这是类成员变量修饰的原因)



@override -有效的重写注解,起到检测参数列表是否一致的作用

 */
public class Teacher extends Employee {

    int num=100;    //可以与父类重名

    @Override
    public int getAge() {
        return age;
    }

    @Override
    public void setAge(int age) {
        this.age = age;
    }

    private int age;

    //重写method方法,
    //三中变量的调用,子类num,局部num,父类num
    @Override
    public void method() {
        int num=50; //局部变量
        System.out.println("我是局部变量:"+num);
        System.out.println("我是子类里的变量"+this.num);      //此类method方法外的的num
        System.out.println("我是父类里的变量"+super.num);    //父类的num
    }
}
package cn.learn.extend;

/*
    继承是多态的前提
    子类定义格式
    public class 子类名称 extends 父类名称{}

    继承中:
    构造方法的调用是父类的优先于子类,因为子类的构造方法中有一个默认的"super()",所以构造方法父类优先
    但是若父类没写无参的构造方法,则默认调用会报错,【这也是标准类有无参构造的原因】
    但是可以在子类的构造方法中自己有个有参函数防止报错,格式“super(参数数据)”
    **但是只有子类构造方法才有资格调用,且必须是第一个语句,且只能调用一次

    子类必须调用父类构造方法,不写则会默认调用


    super关键字用法
    1.在子类方法中访问父类的成员变量
    2.在与父类重名的子类方法中调用父类方法
    3.在子类的构造方法中,访问父类的构造方法

    this关键字
    1.this在成员方法中用来访问本类的成员变量,用于区分成员方法的同名局部变量
    2.在本类的成员方法中访问本类成员方法,可以省略,用来强调区分父类的同名方法
    3.在本类的重载的构造方法中,访问另一个构造方法,格式:this(参数数据)
    注:3中this必须是第一个语句且只能调用一次,可见this与super无法同时使用,还有一点就是有参的构造不能调用无参,会陷入死循环



 */
public class Extends  {
    public static void main(String[] args) {
        Teacher one=new Teacher();

        one.method();
        one.setAge(21);
        System.out.println("目前年龄:"+one.getAge()+"\t"+one.num);//21 100


    }

}

猜你喜欢

转载自www.cnblogs.com/huxiaobai/p/11449545.html