• 大数据JAVA基础第十天


    1.继承extends(也叫扩展)

    引入

    首先写两个类:

        //定义学生类

        class Student {

           //成员变量

           private String name;

           private int age;

           //空构造

           public Student(){}

          

           //getXxx()/setXxx()

       

           public void eat() {

               System.out.println("吃饭");

           }

        }

    //定义教师类

        class Teacher {

           //成员变量

           private String name;

           private int age;

           //空构造

           public Teacher(){}

          

           //getXxx()/setXxx()

          

           public void eat() {

               System.out.println("吃饭");

           }

        }

    2.继承概述

    多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只要继承那个类即可。

    通过extends关键字可以实现类与类的继承,继承的格式如下:

        class 子类名 extends 父类名 {} 

    单独的这个类,也就是被继承的类,称为父类,基类或者超类;这多个类称为子类或者派生类。

    有了继承以后,我们定义一个类的时候,可以在一个已经存在的类的基础上,还可以定义自己的新成员。

    3.继承的案例和继承的好处

    通过一个具体案例来演示代码

    案例1:学生类和教师,定义两个功能(吃饭,睡觉)

    案例2:加入人类后改进

    /*

        继承概述:

           把多个类中相同的内容给提取出来定义到一个类中。

        格式:

           class 子类名 extends 父类名 {}

        好处:

           A:提高了代码的复用性

           B:提高了代码的维护性

           C:让类与类之间产生了关系,是多态的前提

    */

    //使用继承前

    /*

    class Student {

        public void eat() {

           System.out.println("吃饭");

        }

        public void sleep() {

           System.out.println("睡觉");

        }

    }

    4.继承的好处

    提高了代码的复用性

       多个类相同的成员可以放到同一个类中

    提高了代码的维护性

       如果功能的代码需要修改,修改一处即可,继承的类中自动都被修改了

    让类与类之间产生了关系,是多态的前提

    5.Java中继承的特点

    • Java只支持单继承,不支持多继承。

        即:一个类只能有一个直接父类,不可以有多个直接父类。

        class SubDemo extends Demo{}           //ok

        class SubDemo extends Demo1,Demo2...//error不能继承多个类

     

    • Java支持多层继承(继承体系)

        class A{}

        class B extends A{}

        class C extends B{}

    6.Java中继承的注意事项

    子类只能继承父类所有非私有的成员(成员方法和成员变量)

    子类不能继承父类的构造方法,但是可以通过super(后面讲)关键字去访问父类构造方法。

    不要为了部分功能而去继承

    我们到底在什么时候使用继承呢?

    继承中类之间体现的是:"is a"的关系。

    7.继承中成员变量的关系

    案例演示

    子父类中同名和不同名的成员变量

    子类方法中寻找变量的顺序

    类的组成:

           成员变量:

           构造方法:

           成员方法:

        而现在我们又讲解了继承,所以,我们就应该来考虑一下,类的组成部分的各自关系。

        继承中成员变量的关系:

           A:子类中的成员变量和父类中的成员变量名称不一样,这个太简单。

           B:子类中的成员变量和父类中的成员变量名称一样,这会出现什么情况呢?

               在子类方法中访问一个变量的查找顺序:

               a:在子类方法的局部范围找,有就使用

               b:在子类的成员范围找,有就使用

               c:在父类的成员范围找,有就使用

               d:如果还找不到,就报错。

    8.结论

    在子类方法中访问一个变量

    首先在子类局部范围找,也就是方法内部

    然后在子类成员范围找,也就是子类的成员变量

    最后在父类成员变量范围找(肯定不能访问到父类局部范围)

    如果还是没有就报错。

    9.super关键字

    super的用法和this很像

    this   代表本类对象的引用

    super  代表父类存储空间的标识(可以理解为父类对象的引用)

     

    用法(this和super均可如下使用)

    • 访问成员变量

        this.成员变量

        super.成员变量(访问父类的成员变量,不能访问父类的private变量)

        访问静态成员时,也可以用:父类名.静态成员

    • 访问构造方法(子父类的构造方法问题再讲)

    this(…)       super(…)          //

    • 访问成员方法(子父类的成员方法问题再讲)

       this.成员方法()     super.成员方法()

    10.问题是:

           我不仅仅要输出局部范围的num,还要输出本类成员范围的num。怎么办呢?

           我还想要输出父类成员范围的num。怎么办呢?

               如果有一个东西和this相似,但是可以直接访问父类的数据就好了。

               恭喜你,这个关键字是存在的:super。

        this和super的区别?

               this代表本类对应的引用。

               super代表父类存储空间的标识(可以理解为父类引用,可以操作父类的成员)

               A:调用成员变量

                  this.成员变量 调用本类的成员变量

                  super.成员变量 调用父类的成员变量

               B:调用构造方法

                  this(...)  调用本类的构造方法

                  super(...) 调用父类的构造方法

               C:调用成员方法

                  this.成员方法 调用本类的成员方法

                  super.成员方法 调用父类的成员方法

  • 相关阅读:
    [calss*="col-"]匹配类名中包含col-的类名,^以col-开头,$以col-结尾
    插件写法之脚本运行环境,mac和window检测
    @media only screen and (max-width:640px)中的问题,响应式布局
    webpack2的配置属性说明entry,output,state,plugins,node,module,context
    npm ERR! missing script: dev 报错解决
    [jshint] 'import' is only available in ES6 (use 'esversion: 6'). (W119) 提示import等ES6语法的jshint错误的,在代码前加一行 /* jshint esversion: 6 */
    Uncaught TypeError: (intermediate value)(...) is not a function 上一个方法结束没有加分号; 代码解析报错
    LeetCode 1. two sum
    redis集群尝试
    服务器搭建私人Git
  • 原文地址:https://www.cnblogs.com/xiejiajun/p/6618772.html
Copyright © 2020-2023  润新知