Java学习笔记 继承(extends)

package cn.itcast.day09.demo01;

public class Employee {
    public void method(){
        System.out.println("方法执行");
    }
}

package cn.itcast.day09.demo01;

public class Teacher extends Employee {
    //继承,Employee的子类
    //包含了继承父类的方法
}

package cn.itcast.day09.demo01;
//定义了另外一个子类
public class Assistant extends Employee {

}

package cn.itcast.day09.demo01;
/*继承:子类就是一个父类
* 定义父类:常规的类定义方法
* 定义子类:public class 子类名称 extends 父类名称{}*/
public class Demo01Extends {
    public static void main(String[] args) {
        Teacher teacher = new Teacher();
        teacher.method();//虽然什么也没写,继承了父类的方法
        Assistant assistant = new Assistant();
        assistant.method();//一个方法多次使用 达到代码复用的效果
    }

}

package cn.itcast.day09.demo2;

public class Fu {
    int numFu = 10;
    int num = 100;
    public void methodFu(){
        System.out.println(num);//使用本类中
    }

}

package cn.itcast.day09.demo2;

public class Zi extends Fu {
    int numZi = 20;
    int num = 1000;
    public void methodZi(){
        System.out.println(num);//本类中有num,用的是本类中的num
    }
}

package cn.itcast.day09.demo2;

public class Demo01ExtandField {
    public static void main(String[] args) {
        Fu fu = new Fu();
        System.out.println(fu.numFu);//仅有父类中的方法,没用子类的方法
        Zi zi = new Zi();
        System.out.println(zi.numFu);//10 ,继承于父类
        System.out.println(zi.numZi);//20
        //若父类与子类中成员变量重名,创建子类对象时有两者访问方法
        //直接通过子类对象访问
        //间接通过成员方法 方法属于谁,就优先用谁,没用则向上找
        System.out.println("===========");
        System.out.println(zi.num);//重名部分,根据Zi对象创建,优先子类 1000 若之中没用,则向上找
        //System.out.println(zi.abc);  //父类子类都没有,编译报错

        System.out.println("===========");
        zi.methodZi();//1000
        zi.methodFu();//这个方法在父类中定义,属于父类,不会向下找子类 100
    }
}

成员变量的区分:

package cn.itcast.day09.demo03;

public class Fu {
    int num = 10;

}


package cn.itcast.day09.demo03;

public class Zi extends Fu {
    int num = 20;
    public void method(){
        int num = 30;
        System.out.println(num);//30
        System.out.println(this.num);//20
        System.out.println(super.num);//10 父类的成员变量
    }
}


package cn.itcast.day09.demo03;
/*三个num 父类 子类 子类方法中
*局部变量:
* 本类的成员变量
*父类的成员变量
* */
public class Demo01ExtandField {
    public static void main(String[] args) {
        Zi zi = new Zi();
        zi.method();

    }
}

package cn.itcast.day09.demo04;

public class Fu {
    public void methodFu(){
        System.out.println("父类方法执行");
    }
    public void method(){
        System.out.println("父类同名方法执行!");
    }
}



package cn.itcast.day09.demo04;

public class Zi extends Fu {
    public void methodZi(){
        System.out.println("子类方法执行");
    }
    public void method(){
        System.out.println("子类同名方法执行!");
    }
}

package cn.itcast.day09.demo04;
/*成员方法的访问
* */
/*重写(Override)
* 在继承关系中,方法名称一样,参数列表一样
* 重写(Override):参数列表一样    方法覆盖  创建对象是谁,就用谁的方法
* 重载(Overload):参数列表不一样*/
public class Demo01ExtandsMethod {
    public static void main(String[] args) {
        Zi zi = new Zi();
        //子类与父类的不同名 方法调用
        zi.methodZi();//向上找
        zi.methodFu();
        //
        zi.method();//创建对象是谁,就优先使用谁的方法,如果没有则向上找 调用的子类方法
        //无论成员方法或成员变量 若无则必然向上找父类,绝对不可能找子类
    }

}

方法覆盖

package cn.itcast.day09.demo05;

public class Fu {
    public void method(){

    }
}


package cn.itcast.day09.demo05;

public class Zi extends Fu {
    @Override//安全监测,写上不报错说明是正确的方法覆盖
    public void method(){
        //方法覆盖,不报错
        //子类方法返回值需要小于等于父类方法
        //String有一个父类Object
        //Object是所有类的父类,继承关系的顶端 java.lang.Object
        //子类方法权限必须大于等于父类方法的权限修饰符
        //public>pretected>(dafulat)(留空,不是关键字)>private 
    }

}



package cn.itcast.day09.demo05;
//@Override 写在方法前面,用于检测是否是覆盖
public class Demo01Override {
}

构造方法

package cn.itcast.day09.demo06;

public class Fu {
    public Fu(){
        System.out.println("父类构造方法");
    }
    public Fu(int num){
        System.out.println("父类有参数构造方法");
    }
}


package cn.itcast.day09.demo06;

public class Zi extends Fu{
    public Zi(){
        //super() 编译器自动生成
        super(20);//调用父类重载构造,super仅在子类构造方法中可以被调用,且必须为第一行第一个语句
        System.out.println("子类构造方法!");
    }

}




package cn.itcast.day09.demo06;

public class Demo01Construct {
    public static void main(String[] args) {
        Zi zi = new Zi();//先父类,再子类        父类构造方法        子类构造方法!
        //子类构造方法中有默认隐含 super()调用 若什么都不写则有,因此先调用父类构造
        //可以利用super关键字,

    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值