Java中的继承关系

1.继承

继承是面向对象三大特征之一,子类可以继承父类中的属性和方法,并且可以重新定义并添加新的属性和方法。

2.继承的格式

格式:public class 子类名 extends 父类名{}

【子类也被称为派生类】

【父类也被成为基类,超类】

例如:创建一个父类Father

在父类中定义方法a来执行输出语句“我是父类”

/*父类*/
public class Father {
    /*定义一个方法a*/
    public void a(){
        System.out.println("我是父类");
    }
}

创建一个子类Son

/*子类
* extends Father表示已经继承了父类中的属性与方法*/
public class Son extends Father {
}

创建一个测试类Test

/*测试类*/
public class Test {
    /*main函数————程序的主入口*/
    public static void main(String[] args) {
        Son aaa=new Son();
        aaa.a();
    }


}

执行结果

这里可以看出子类Son继承并调用了父类中的方法a,并实现了输出。

3.继承的优点

提高了代码的复用性,父类定义的内容,子类可以直接拿过来用就可以了,不用代码上反复重复定义了。

【父类private修饰的内容,子类实际上也继承,只是因为封装的特性阻碍了直接调用,但是提供了间接调用的方式,可以间接调用。】

4.方法的重写

(1)重写:发生在子类和父类中,当子类对父类提供的方法不满意的时候,要对父类的方法进行重写。

(2)重写格式:重写有着严格的格式要求,子类方法名字和父类必须一致,参数列表(个数,类型,顺序)也要和父类一致。

例如:创建一个父类Father

其中,定义一个方法eat

/*父类*/
public class Father {
    /*定义一个方法a*/
    public void eat(){
        System.out.println("我爱吃鸡蛋");
    }
}

创建一个子类

其中继承父类的方法eat,但是进行了重写,输出语句有所不同

/*子类
* extends Father表示已经继承了父类中的属性与方法*/
public class Son extends Father {
    public void eat(){
        System.out.println("我爱吃红烧肉");
    }
}

创建一个测试类

/*测试类*/
public class Test {
    /*main函数————程序的主入口*/
    public static void main(String[] args) {
        /*创建一个Son类的对象*/
        Son aaa=new Son();
        aaa.eat();
    }


}

输出结果

可以看出,调用的方法eat已经重写成功。

5.super修饰构造器

子类构造一定会调用父类构造,一般用super 关键字来调用,如果没有写,则程序会自动帮忙调用父类的无参构造。

例如:

【在调用的时候,super 代码必须位于子类构造方法中代码的第一行】

例如,放在了第二行,立马报错

6.Object类

所有类都直接或间接的继承子Object类,Object类是所有java类的根基类,这意味着所有的java对象都拥有Object类的属性和方法,如果在类的声明中未使用extends关键字指明其父类,则默认继承Object类。

7.Java中继承的注意事项

Java中类只支持单继承,可以多层继承,一个类继承一个类,但是不支持多继承,指一个子类继承多个父类。

8.小练习----军人与医生

要求:

1.请使用面向对象的思想,设计自定义类描述医生和军人类

2.分析医生和军人的公共成员,提取出父类---人类

3.利用继承机制,实现医生类和军人类

4.利用封装机制,设置属性的私有访问权限,通过公有的get,set方法实现对属性的访问 5、 5.编写测试类,分别测试人类,医生类和军人类的对象及相关方法(测试数据信息自定) 6、 6.定义名为doc的包存放人类、医生类、军人类和测试类

参考分析思路:

医生类:

属性包括:姓名,年龄,性别,所在科室,职务

方法包括:工作  

军人类: 属性包括:姓名,年龄,性别,所属部队,职务,军龄

方法包括:工作

1.定义一个父类People

public class People {
    private String name;
    private String sex;
    private int age;
    private String zhiwu;
    private String zhiye;

    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getSex() {
        return sex;
    }
    public void setSex(String sex) {
        this.sex = sex;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public String getZhiwu() {
        return zhiwu;
    }
    public void setZhiwu(String zhiwu) {
        this.zhiwu = zhiwu;
    }
    public String getZhiye() {
        return zhiye;
    }
    public void setZhiye(String zhiye) {
        this.zhiye = zhiye;
    }

    public People(){}

    public People(String name,String sex,int age,String zhiwu,String zhiye){
        this.setAge(age);
        this.setName(name);
        this.setSex(sex);
        this.setZhiwu(zhiwu);
        this.setZhiye(zhiye);
    }

}

2.定义一个Solider类

public class Soldier extends People {
    private String ssbudui;
    private int time;

    public String getSsbudui() {
        return ssbudui;
    }
    public void setSsbudui(String ssbudui) {
        this.ssbudui = ssbudui;
    }
    public int getTime() {
        return time;
    }
    public void setTime(int time) {
        this.time = time;
    }

    public Soldier(){}

    public Soldier(String ssbudui,int time){
        this.setTime(time);
        this.setSsbudui(ssbudui);
    }

    public void work1(){
        System.out.println("姓名:"+getName());
        System.out.println("职业:"+getZhiye());
        System.out.println("年龄:"+getAge());
        System.out.println("所属部队"+ssbudui);
        System.out.println("职务:"+getZhiwu());
        System.out.println("军龄:"+time);
    }

}

3.定义一个Doctor类

public class Doctor extends People{
    private String szkeshi;

    public String getSzkeshi() {
        return szkeshi;
    }
    public void setSzkeshi(String szkeshi) {
        this.szkeshi = szkeshi;
    }

    public Doctor(){}

    public Doctor(String szkeshi){
        this.setSzkeshi(szkeshi);
    }

    public void work2(){
        System.out.println("姓名:"+getName());
        System.out.println("职业:"+getZhiye());
        System.out.println("年龄:"+getAge());
        System.out.println("所在科室:"+szkeshi);
        System.out.println("职务:"+getZhiwu());

    }
}

4.测试

public class Test {
    public static void main(String[] args) {
        Soldier aaa=new Soldier();
        aaa.setSsbudui("北京军区");
        aaa.setTime(43);
        aaa.setName("刘天明");
        aaa.setAge(62);
        aaa.setZhiye("军人");
        aaa.setZhiwu("军区司令员");
        Doctor bbb=new Doctor();
        bbb.setSzkeshi("内科");
        bbb.setName("刘新");
        bbb.setAge(23);
        bbb.setZhiwu("主任医师");
        bbb.setZhiye("医生");
        System.out.println("我是普通人,要工作才有饭吃");
        System.out.println("=========================");
        aaa.work1();
        System.out.println("=========================");
        bbb.work2();
    }
}

5.运行结果

  • 30
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值