Java面向对象——继承(1)

前言

        本篇文章来给大家讲解java面向对象三大特性中的继承。本次的内容相比上篇的封装内容要多很多,同时难度也有所增加,我会用最通俗,最直观的案例带大家学习。

        继承这一章节我会分三次进行讲解,初识继承、深入继承特性以及继承JVM内存分布。如果能将继承深入的理解,那么你对OOP设计思想也会得到质的飞跃,同时也为今后的学习打下坚实的基础!接下来带大家初识面向对象的继承。

基本概念

  • 继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的属性和方法,或子类从父类继承方法,使得子类具有父类相同的行为。
  • Java继承是使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加新的数据或新的功能,也可以用父类的功能,但不能选择性地继承父类

相信没接触继承的小伙伴,看到上面概念会觉得很抽象。下面我给大家引出继承。

引出问题

        有一个需求:统计一年级和二年学生的基本信息。首先我们想到的是编写两个类FirstGrade和SecondGrade两个类,包含着姓名,年龄、性别等基本信息,如下:

public class FirstGrade {
    public String name;
    public int age;
    public String sex;

    //introduce()方法输出学生的基本信息
    public void introduce(){
        System.out.println("我是一年级的学生,"+"姓名:"+name+",年龄:"+age+",性别:"+sex);
    }

    //会说的语言
    public void speak(){
        System.out.println("我会说中文!");
    }
}
public class SecondGrade {
    public String name;
    public int age;
    public String sex;

    //introduce()方法输出学生的基本信息
    public void introduce(){
        System.out.println("我是二年级的学生,"+"姓名:"+name+",年龄:"+age+",性别:"+sex);
    }
    //会说的语言
    public void speak(){
        System.out.println("我会说中文!");
    }
}

上面两个类可以完成对一二两级学生的统计,此时又添加一个需求:要求统计三四五六两级学生的信息。怎么办?继续编写三四五六年级的类?

引出继承

仔细观察以上代码,我们可以发现,它们有共同的属性,独有的方法。如果接着往后编写其余年级的类,会使代码臃肿,复用性不高。此时我们可以使用继承来解决这个问题,编写一个Student类,将共同的属性方法放在一个类中,让其它类(子类)继承该类(父类),子类拥有父类非私有化的属性和方法。代码修改如下:

Student类

public class Student {
    //共同的属性
    public String name;
    public int age;
    public String sex;

    //共同的方法
    public void speak(){
        System.out.println("我会说中文!");
    }
}

FirstGrade类和SecondGrade类

让这两类继承Student类,使用extend关键字。

/* 一年级 */
public class FirstGrade extends Student{

    //独有的方法
    public void introduce(){
        System.out.println("我是一年级的学生,"+"姓名:"+name+",年龄:"+age+",性别:"+sex);
    }
}

/* 二年级 */
public class SecondGrade extends Student{

    //独有的方法
    public void introduce(){
        System.out.println("我是二年级的学生,"+"姓名:"+name+",年龄:"+age+",性别:"+sex);
    }
}

StudentTest测试类

/*测试*/
public class StudentTest {
    public static void main(String[] args) {
        FirstGrade firstGrade = new FirstGrade();
        firstGrade.name="张三";
        firstGrade.age=10;
        firstGrade.sex="男";
        firstGrade.speak();
        firstGrade.introduce();
        System.out.println("================");
        SecondGrade secondGrade = new SecondGrade();
        secondGrade.name="李四";
        secondGrade.age=11;
        secondGrade.sex="男";
        firstGrade.speak();
        secondGrade.introduce();
    }
}

控制台打印:
我会说中文!
我是一年级的学生,姓名:张三,年龄:10,性别:男
================
我会说中文!
我是一年级的学生,姓名:李四,年龄:11,性别:男

继承带来的优缺点

优点:

  • 代码共享,减少创建类的工作量,每个子类都拥有父类的方法和属性;
  • 继承提高了代码的复用性
  • 代码的扩展性和维护性提高了,实现父类的方法就可以“为所欲为”了,君不见很多开源框架的扩展接口都是通过继承父类来完成的

缺点:

  • 增强了类之间的耦合,软件开发的原则是高内聚,低耦合。

        以上就是本篇内容,提出问题的同时并引出继承,当然继承的内容远远不及这么多,本篇的目的就是让大家直观明了的初识继承,后续将会讲解继承的特性。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值