美文网首页
Java继承

Java继承

作者: 海人为记 | 来源:发表于2018-06-16 17:12 被阅读5次

继承的定义

继承是Java面向对象编程技术的一块基石,因为它允许创建分等级层次的类。
继承就是子类继承父类的特性和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。
所以继承需要符合的关系是:is-a,父类更通用,子类更具体。
我们创建一个类需要它来继承某一个类的语法:

class 子类 extends 父类

例如我们定义了一个 Animal 类,我们在创建一个 Cat 类,我们需要它继承 Animal 类

class Cat extends Animal {
        ...
}

我们先创建一个父类 Animal

public class Animal {
    public Animal() {
        System.out.println("Animal被调用");
    }
    public void eat() {
        System.out.println("我就是在吃饭");
    }
}

在创建一个子类

public class Cat extends Animal {
}

上面便是Cat类继承了父类Animal,我们Cat类里什么都没有写,其实它继承了父类Animal,所以Cat类拥有Animal类的全部方法和属性(除开private方法和属性)。我们创建一个测试类测试以下。

class Test{
    public static void main(String[] args) {
        Cat cat = new Cat();
        cat.eat();
    }
}

为什么需要继承?
如果有两个类相似,那么它们会有许多重复的代码,导致后果就是代码量大且臃肿,后期的维护性不高。通过继承就可以解决这个问题,将两段代码中相同的部分提取出来组成一个父类,实现代码的复用。

继承的特点:

  • 子类拥有父类除private以外的所有属性和方法
  • 子类可以拥有自己的属性和方法
  • 子类可以重写实现父类的方法
  • Java中的继承是单继承,一个类只有一个父类

提示:(1)Java实现多继承的一个办法是 implements(实现)接口. (2)为了防止子类在想要重写父类方法时写错,造成无法覆盖,我们采用注解@Override,注解是给编译器的注释,告诉编译器,如果下面的方法没有覆盖父类方法,则给出报错

继承的优点

  • 提高代码复用性和可维护性
  • 父类的属性方法可以用于子类
  • 可以轻松的定义子类
  • 使设计应用程序变得简单

继承的缺点
打破了封装性,子类依赖于父类的实现细节(类的耦合性增强了,开发的原则是高内聚低耦合,提高可扩展性.)
耦合:类与类的关系
内聚:就是自己完成某件事的能力

方法的重写(Overriding)

虽然子类可以继承父类的方法,但如果子类对父类的方法不满意,想在里面加入适合自己的一些操作时,我们就需要将方法进行重写。并且子类在调用方法中,优先调用子类的方法。
比如上一个例子中 Animal 有bark()这个方法代表了动物叫,但是不同的动物有不同的叫法,比如狗是汪汪汪,猫是喵喵喵。
当然在方法重写时我们需要注意,重写的方法一定要与原父类的方法语法保持一致,比如返回值类型,参数类型及个数,和方法名都必须一致。
例如:

public class Cat extends Animal {
       //重写父类的eat方法
        public void eat() {
                System.out.println("猫就是在吃饭");
    }
}

我们写个测试类来看看输出结果:

public class Test{
    public static void main(String args[]){
           Animal a = new Animal(); // Animal 对象
           Cat c = new Cat();   // Cat 对象
          Animal b = new Cat(); // Cat 对象,向上转型为Animal类型
          a.eat();// 执行 Animal 类的方法
         d.eat();//执行 Cat 类的方法
          b.eat();//执行 Cat 类的方法
       }
}

以上编译运行结果如下:

我就是在吃饭
猫就是在吃饭
猫就是在吃饭

继承的初始化顺序

父类的静态变量 --> 父类的静态代码块 --> 子类的静态变量 --> 子类的静态代码块 --> 父类的非静态变量(父类的非静态代码块) --> 父类的构造方法 --> 子类的非静态变量(子类的非静态代码块) --> 子类的构造方法
父类的非静态变量根父类的非静态代码块是同一级别,看那个部分写在类的最前面谁就先被执行, 子类的非静态变量和子类的非静态代码块也是一样的

相关文章

  • Java继承

    一、Java继承详解 Java继承目录:1.为什么要”继承“?2.继承的类型2.1 单继承2.2 多重继承2.3 ...

  • Java继承

    Java继承 一、继承类型 Java不支持多继承,但是支持多重继承 二、继承的特性 子类拥有父类非 private...

  • JAVA语言第二课

    JAVA面向对象——四大特征 继承篇——extendsJava 继承继承的概念继承是java面向对象编程技术的...

  • java培训专家介绍java的特性之:继承

    java培训专家介绍java的特性之:继承 什么是继承?java特性继承又是什么?在线教育平台专家为你解答! 多个...

  • JAVA 核心笔记 || [7] 继承

    继承 被继承的类为 基类 或者 父类 类 只能单继承 不可同时继承多类 Animal.java Dog.java ...

  • 继承

    java中对于继承,java只支持单继承。java虽然不直接支持多继承,但是可实现多接口。 1:成员变量。当子父类...

  • 2017-12-29

    Java学习日记(4) 主要谈一下——继承extends 个 Tips : Java不像c++,Java是单继承(...

  • JAVA核心技术总结(五六章)继承&接口与内部类

    第五章 继承 在Java中,所有的继承都是公有继承,没有C++的私有继承和保护继承 Java同C++一样,子类不能...

  • Java初级笔记No.3(更新中)

    2018.7.26 1、Java中的继承 Java中使用extends关键字来说明继承关系。 2、继承的特性 ja...

  • Java中的继承

    Java中的继承 Java 继承 什么是继承 继承是用来描述“is-a”的关系;如果说两个对象A和B,若可以描述成...

网友评论

      本文标题:Java继承

      本文链接:https://www.haomeiwen.com/subject/vjqveftx.html