• Java面向对象的特点之:继承


    对于继承,当大家看到这个词语的时候,在现实生活中,想必也会自然而然的想到了:继承家产??那么,在Java的面向对象的时候,也存在这样的思想!!

    下面笔者来带领大家走进:继承!!

    1. class Dog {
    2. public String name ;
    3. public int age ;
    4. public void eat() {
    5. System.out.println(name +" 正在吃狗粮!");
    6. }
    7. //添加特有的方法
    8. public void wangwang() {
    9. System.out.println(name+"正在汪汪叫!");
    10. }
    11. }
    12. class Cat {
    13. public String name ;
    14. public int age ;
    15. public void eat() {
    16. System.out.println(name +" 正在吃mao粮!");
    17. }
    18. //添加特有的方法
    19. public void miaomiao() {
    20. System.out.println(name+" 正在喵喵叫,惹人爱!(づ ̄3 ̄)づ╭❤~");
    21. }
    22. }

    在上述的代码中,Dog 与Cat这两个类之间有共用的成员变量,成员方法,也有特有的成员方法!!

     对于上述的共有的成员属性,在上述代码中,仅仅定义了两个类,但是当定义多个类,都含有共有的成员属性,那么写起来,不得麻烦死??因此,我们可以将共有的属性抽取出来,放到一个类当中,当要使用的时候,就可以去哪儿拿就可以了!!

    对上述代码进行简单更改:

    1. class Animal {
    2. public String name ;
    3. public int age ;
    4. public void eat() {
    5. System.out.println(name +" 正在吃饭!");
    6. }
    7. }
    8. class Dog extends Animal {
    9. //添加特有的方法
    10. public void wangwang() {
    11. System.out.println(name+"正在汪汪叫!");
    12. }
    13. }
    14. class Cat extends Animal{
    15. //添加特有的方法
    16. public void miaomiao() {
    17. System.out.println(name+" 正在喵喵叫,惹人爱!(づ ̄3 ̄)づ╭❤~");
    18. }
    19. }

    在上述代码中:

    在上述的代码中,就用了继承的思想!!

    继承的最大意义:是对代码的重复利用!!(is a)的关系!!extands 是继承的关键字!!

    class Dog extends Animal 所代表的意义是:  Dog is  a Animal

    继承的概念:

    继承(inheritance)机制:是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特 性 的基础上进行扩展增加新功能,这样产生新的类,称派生类(子类)。继承呈现了面向对象程序设计的层次结构, 体现了 由简单到复杂的认知过程。继承主要解决的问题是:共性的抽取,实现代码复用

    继承的简单语法:

    修饰符(可写可不写)  class 子类名称  extends 父类名称 {

      …………

    …………

    }

    注意:

    1. 子类会将父类中的成员变量或者成员方法继承到子类中了
    2. 子类继承父类之后,必须要新添加(也可以不添加)自己特有的成员,体现出与基类的不同,否则就没有必要继承了
    3.  Java中只能继承一个父类,并不支持多继承!
    4. 子类也可以当父类

    父类成员的访问!!

    1.子类和父类不存在同名的成员变量(比较简单,容易理解)

    2.子类和父类成员变量同名!

    如果子类与父类有同名的成员变量,则优先访问子类自己的!!

    1. class Base { //父类
    2. public int a ;
    3. public int b ;
    4. public int c ; //默认成员变量,c ---->0
    5. }
    6. class Derived extends Base {
    7. public int c = 9 ;
    8. public void func() {
    9. System.out.println(a);
    10. System.out.println(b);
    11. System.out.println(c);
    12. }
    13. }
    14. public class test {
    15. public static void main(String[] args) {
    16. Derived derived = new Derived();
    17. derived.func();
    18. }
    19. }

    对于上述的代码,父类和子类有着相同的成员变量,那么,请看一下代码的运行结果:

     拓展一下:当我们在类中有一下代码的时候:

    1. public class Base {
    2. int a;
    3. int b;
    4. int c;
    5. }
    6. public class Derived extends Base {
    7. int a;
    8. char b;
    9. }

    并且给其赋值:

    1. public void method(){
    2. a=100;
    3. b=110;
    4. c=120;
    5. }

    通过上述代码,思考一下:a ,b, c 的值分别为多少??

     在子类方法中通过子类对象访问成员时:

    1. 如果访问的成员变量子类中,那么就先访问子类自己的成员变量
    2. 如果访问的成员变量子类中没有,那么则访问父类继承下来的,如果父类中没有定义,那么编译报错!
    3. 如果访问的成员变量与父类的成员变量同名,则优先访问子类自己的成员变量!

    综上所述:成员变量的访问遵循就近原则,子类自己有,则先访问子类自己的,如果子类没有,那么像父类中查找!

    在上述代码中,如果,就想要访问父类的成员c ,那么可以使用:super.c

      System.out.println(super.c);

    对于super关键字 :可以用来在子类方法中访问父类的成员!!

    super关键字的使用:

    1. super. date :在子类当中访问父类的成员变量
    2. super. func() :在子类当中访问父类的成员方法

    对于super关键字的使用时注意事项:

    1. 只能在非静态方法中使用
    2. 在子类方法中,访问父类的成员变量和方法

    子类中访问父类的成员方法!!

    1. 成员方法名字不同 (简单)
    2. 成员方法名字相同,跟父类成员的访问类似,可以用super来访问

    说明:

    1. 通过子类对象访问父类与子类中不同名的方法时,优先在子类中找,找到则访问,找不到,则编译报错!
    2. 通过派生类(子类)对象访问父类和子类同名方法时,如果父类和子类同, 方法的参数列表不同(重载),根据调用方法传递的参数选择合适的方法访问,如果没有,则报错!

     

  • 相关阅读:
    git基本使用
    【AI应用探讨】—知识图谱(KG)应用场景
    1、 赛灵思-Zynq UltraScale+ MPSoCs:产品简介
    多线程相关问题
    前端现场笔试题
    Leetcode.19 删除链表的倒数第 N 个结点
    React源码学习
    springboot整合Redis报错:java.io.IOException 远程主机强迫关闭了一个现有的连接
    uniapp使用阿里图标显示查找文件失败,在H5端图标显示正常但是在移动端不显示图标的问题解决,uniapp中如何使用阿里巴巴图标库
    1462_TC275_Lite_kit上的调试器使用
  • 原文地址:https://blog.csdn.net/weixin_64308540/article/details/127976469