zoukankan      html  css  js  c++  java
  • JAVA 继承

    1.继承概述

    继承应该理解成师傅与徒弟的关系,师傅会的,徒弟也都会。不用理解成父子关系,因为父子关系,比如家产,父亲有100块钱,那么两个儿子就要一人五十块钱。

     

     继承父类,子类里面的姓名和工号就可以不用写了

    在继承关系中,子类就是一个父类,也就是说,子类可以被当做父类看待。

    例如,父类是员工,子类是讲师,那么“讲师就是一个员工”。关系:is-a

    定义父类的格式:(一个普通的类定义)

    public class 父类名称 {

      // ...

    }

    定义子类的格式:

    public class 子类名称 extends 父类名称 {

       // ...

    }

     父类Employee

    // 定义一个父类,员工
    public class Employee {
        public void method() {
            System.out.println("方法执行!");
        }
    
    }
    

     子类Teacher

    // 定义了一个员工的子类,讲师
    public class Teacher extends Employee{
    
    }
    

      子类Assitant

    // 定义另一个子类:助教
    public class Assitant extends Employee{
    }

    Demo03Extends

    public class Demo03Extends {
        public static void main(String[] args) {
            // 创建了一个子类对象
            Teacher teacher = new Teacher();
            // Teacher类中虽然什么都没写,但是会继承来自父类的method方法
            teacher.method();
    
            // 创建另一个子类助教对象
            Assitant assitant = new Assitant();
            assitant.method();
        }
    }

      

    通过父类Employee写上一个方法,从而达到两个类中都有这个方法,实现代码复用的效果。

     2.继承中成员变量的访问特点

    父类

    public class Fu {
        int numFu = 10;
    }
    

      子类

    public class Zi extends Fu {
        int numZi = 20;
    }
    Demo03ExtendsField 
    public class Demo03ExtendsField {
    
        public static void main(String[] args) {
            Fu fu = new Fu();  // 创建父类对象
            System.out.println(fu.numFu);  // 只能使用父类的东西,没有任何子类的东西
    
            Zi zi = new Zi();
            System.out.println(zi.numFu);
            System.out.println(zi.numZi);
        }
    }
    

      

    可以看到子类可以用父类的变量

    3.继承中访问成员方法的规则

    在父子类继承关系中,创建子类对象,访问成员方法的规则:

    创建对象是谁,就优先使用谁,如果没有则向上找

    注意:无论是成员方法,还是成员变量,如果没有都是向上找,绝对不会向下找子类

     

     

     

     在父子类的继承关系当中,如果成员变量重名,则创建子类对象时,访问有两种方式:

    (1)直接通过子类对象访问成员变量:

      等号左边是谁,就优先用谁,没有则向上找

     

    (2)间接通过成员方法访问成员变量:

     该方法属于谁,就优先用谁,没有就向上找

     3.区分子类方法中重名的三种

    局部变量:      直接写成员变量名

    本类的成员变量:   this.成员变量名

    父类的成员变量:   super.成员变量名

    4.继承关系中,父子类构造方法的访问特点

    (1)子类构造方法当中,有一个默认隐含的“super()”调用,所以一定是先调用父类构造,后执行子类构造

    (2)子类构造可以通过super关键字来调用父类重载构造

     

     当父类有重载的构造方法,需要用到关键字super

     可以改成这样

     (3)super的父类构造调用,必须是子类构造方法的第一个语句。

    不能一个子类构造调用多次super构造。

     总结:

    子类必须调用父类构造方法,不写则赠送super(),写了则用写的指定super调用,super只能有一个,还必须是第一个

     5.super关键字的三种用法

    (1)在子类的成员方法中,访问父类的成员变量

    (2)在子类的成员方法中,访问父类的成员方法

    (3)在子类的构造方法中,访问父类的构造方法

     6.this关键字的三种用法

    this 关键字用来访问本类内容

    (1)在本类的成员方法中,访问本类的成员变量

    (2)在本类的成员方法中,访问本类的另一个成员方法

     (3)在本类的构造方法中,访问本类的另一个构造方法

    注意:在这种用法中,this(...)也必须是构造方法第一个语句,也是唯一一个。super()和this两种构造调用,不能同时使用。

     

     总结

    父类和子类,可以理解段正淳和他的孩子们,段正淳不知道他有多少孩子,即父类不能向下找,子类可向上找

  • 相关阅读:
    24.纯 CSS 创作出平滑的层叠海浪特效
    23.1纯 CSS 创作一个菜单反色填充特效
    23.纯 CSS 创作一个菜单反色填充特效
    22.纯 CSS 创作出美丽的彩虹条纹文字
    21纯 CSS 创作文本滑动特效的 UI 界面
    BZOJ 2384: [Ceoi2011]Match (KMP,树状数组)
    BZOJ 1511: [POI2006]OKR-Periods of Words KMP
    UOJ #6. 【NOI2014】随机数生成器 贪心
    UOJ #25. 【IOI2014】Wall 线段树
    BZOJ 3670: [Noi2014]动物园 KMP
  • 原文地址:https://www.cnblogs.com/GumpYan/p/13745882.html
Copyright © 2011-2022 走看看