欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

java基础知识--继承

程序员文章站 2024-03-15 18:14:48
...

概述

  • 继承是多态的前提,如果没有继承,就没有多态;
  • 继承主要解决的问题:共性抽取(子类继承父类)
  • 父类也可叫基类、超类
  • 子类也可叫派生类,子类可以拥有父类可继承的内容,也可以拥有自己专有的内容;

继承的格式

  • 在继承的关系中,“子类就是一个父类”。也就是说,子类可以被当做父类看待。例如父类是员工,子类是讲师,那么“讲师就是一个员工”。
  • 关系:is - a
//定义父类格式:(一个普通的类定义)
public class 父类名称{
}
//定义子类格式
public class 子类名称 extends 父类名称{
}

继承中成员变量访问特点

  • 在父子类的继承关系当中,如果成员变量重名,则创建子类对象时,访问有两种方式:
       1)直接通过子类对象访问成员变量:等号左边是谁则优先用谁,没有则向上找;
       2)间接通过成员方法访问成员变量: 该方法属于谁则优先用谁,没有则向上找;
public class Fu{
    int num = 200;//父类调用num,则使用父类num;
    public void methodFu(){//该方法在父类中定义,属于父类
         System.out.println(num);
    }
}
public class Zi{
    int num = 100;//子类调用num,则使用子类num,而不是父类的num
    public void methodZi(){
         System.out.println(num);//因为本类当中有num,所以这里用的是本类的num而不是父类的
    }
}

区分子类方法中重名的三种变量

  • 局部变量: 直接写局部变量名
  • 本类成员变量: this.成员变量名
  • 父类成员变量: super.成员变量名
public class Fu{
    int num = 200;//父类成员变量
 }
public class Zi{
    int num = 100;//子类成员变量
    public void methodZi(){
         int num = 300;//局部变量
         System.out.println(num);//局部变量
         System.out.println(this.num);//子类成员变量
         System.out.println(super.num);//父类成员变量
    }
}

继承中成员方法的访问特点

  • 在父子类的继承关系中,创建子类对象,访问成员方法的规则:
       创建的对象是谁,就优先用谁,如果没有则向上找;
  • 注意事项:无论是成员方法还是成员变量,如果没有都是向上找父类,绝对不会向下找子类的;

继承方法中的覆盖重写(Override)

  • 概念:在继承关系当中,方法的名称一样,参数列表一样
  • 重写(Override)和 重载(overload)的区别
       1)重写:方法的名称一样,参数列表一样;也叫覆盖、覆写
       2)重载:方法的名称一样,参数列表不一样;
  • 方法的覆盖重写特点:创建的是子类对象,则优先用子类方法;
  • 注意事项:
       1)必须保证父子类之间方法名称的相同,参数列表也相同;
        @override:写在方法前面,用来检测是不是有效的正确覆盖写;(可以不写,只要满足重写的要求)
       2)子类方法的返回值必须小于等于父类方法的返回值范围;
        object类是所有类的最高类(祖宗类)
       3)子类方法的修饰权限必须大于等于父类方法的权限修饰符;
        public>protected>(default)>private
        (default)是什么都不写
  • 应用场景:对于已经投入使用的类,尽量不要去修改,而是定义一个新的类继承该类,来重复利用共性的内容,并添加新的内容;

继承中构造方法的访问特点

  • 继承关系中,父子构造方法的访问特点;
    • 子类构造方法中有一个默认的隐含的“super()”调用,所以一定是先调用的父类构造,后执行的子类构造;
    • 子类构造可以通过super关键字调用父类的重载构造方法;
    • super的父类构造方法调用,必须是子类构造方法中的第一个语句;
    • 不能一个子类构造方法中调用多次super构造方法;
      即:子类构造方法中必须调用父类的构造方法,不写则默认赠送super(),写了则用写的指定的super调用,super只能有一个且只能有一个;
public class Fu{
    public Fu(){
       System.out.println("父类构造方法!");
    }
    public Fu(int num){
       System.out.println("父类重载构造方法!");
    }
 }
public class Zi{
 public Zi(){
       super();//首先必须调用父类构造方法,不写的话也会默认赠送
  //   super(20);//调用父类重载构造方法,只能调用一个super构造方法
       System.out.println("子类构造方法!");
    }
}

super关键字的三种用法

三种用法:

  • 在子类的成员方法中访问父类的成员变量
  • 在子类的成员方法中访问父类的成员方法
  • 在子类的构造方法中访问父类的构造方法

this关键字的三种用法

  • super关键字用来访问父类内容,this用来访问子类内容
    三种用法:
  • 在本类成员方法中,访问本类的成员变量
  • 在本类的成员方法中,访问本类的另一个成员方法
  • 在本类的构造方法中,访问本类的另一个构造方法
    (注意:this(…)调用也必须是构造方法的第一个语句,唯一一个)
    (注意:super和this两种构造调用,不能同时使用)
public class Zi{
  public Zi(){
     //super();//有了this之后不能在使用super,系统也不会默认赠送了
      this(20);//调用子类重载构造方法,只能调用一个重载构造方法
     System.out.println("子类构造方法!"); 
  }
  public Zi(int num){
    System.out.println("子类重载构造方法!");
 }

super和this关键字内存图解

java基础知识--继承

继承的三个特点

  • java语言是单继承的,一个类只能继承一个父类;
  • java语言可以多级继承;即C继承B,B继承A;
  • 一个父类可以拥有很多个子类;
相关标签: java 继承

上一篇: @Autowired注入为null

下一篇: