java千百问_05面向对象(008)_java中覆盖是什么

     2022-03-21     522

关键词:

点击进入_很多其它_Java千百问

1、什么是覆盖

在java中,覆盖是针对继承才有的概念,某一个子类须要某些方法或属性,但又不想使用父类中的同名的方法或属性,就须要使用覆盖


直白的来说。就是在子类中编写与父类同名同參数同返回值的方法。或同名同类型的属性,子类对象调用该方法/属性时,运行的是子类的方法,而不会运行父类的方法(除非在方法第一行写super();会先运行父类方法,再继续运行子类代码。)

了解类的构造函数看这里:类、对象究竟有什么秘密
了解很多其它继承看这里:java类的继承有什么意义

2、构造函数怎样覆盖

了解类的构造函数看这里:类、对象究竟有什么秘密
当子类继承一个父类时,构造子类时须要调用父类的构造函数,存在三种情况

  1. 父类无构造函数或者一个无參数构造函数时

    子类若无构造函数或者有无參数构造函数,子类构造函数中不须要显式调用父类的构造函数,系统会自己主动在调用子类构造函数前调用父类的构造函数。

  2. 父类仅仅有有參数构造函数时。子类在构造方法中必须要显示调用父类的构造函数。否则编译出错。

  3. 父类既有无參数构造函数。也有有參构造函数。子类能够不在构造方法中调用父类的构造函数,这时使用的是父类的无參数构造函数。

3、方法怎样覆盖

  1. 子类覆盖父类的方法,必须有相同的參数返回类型

  2. 子类覆盖父类的方法,在jdk1.5后,參数、返回类型能够是父类方法返回类的子类
  3. 子类覆盖父类的方法。能够改动方法的修饰符,但仅仅能把方法的作用域放大,而不能把public改动为private。
    了解很多其它java修饰符看这里:public、privite、protected有什么差别
  4. 子类方法能够訪问父类的protected属性,但不能够訪问默认的属性
  5. 子类的静态方法。与父类同名静态方法互不影响。因为静态方法使用类名调用,使用子类类名调用子类的方法,使用父类类名调用父类的方法。
  6. 多态时,当子类覆盖了父类的方法。使用子类覆盖的方法。
    了解什么是多态:[java的多态性都有什么表现][6]
    [6]:

4、属性怎样覆盖

  1. 当子类覆盖父类的实例变量时,父类方法使用的是父类的实例变量,子类方法使用的是子类的实例变量。

  2. 子类或父类使用实例变量时,都相当于在前面加了一个this指针(this.)。

了解很多其它java变量看这里:局部变量、类变量、实例变量有什么差别

5、实例

class SuperClass { 
    private int number; 


    public SuperClass() { 
        this.number = 0; 
    } 


    public SuperClass(int number) { 
        this.number = number; 
    } 


    public int getNumber() { 
        number++; 
        return number; 
    } 
} 

class SubClass1 extends SuperClass { 
    public SubClass1(int number) { 
        super(number); 
    } 

} 

class SubClass2 extends SuperClass { 
    private int number; 


    public SubClass2(int number) { 
        super(number); 
    } 

} 

public class SubClass extends SuperClass { 

    private int number; 


    public SubClass(int number) { 
        super(number); 
    } 


    public int getNumber() { 
        number++; 
        return number; 
    } 


    public static void main(String[] args) { 
        SuperClass s = new SubClass(20); 
        SuperClass s1 = new SubClass1(20); 
        SuperClass s2 = new SubClass2(20); 
        System.out.println(s.getNumber()); 
        System.out.println(s1.getNumber()); 
        System.out.println(s2.getNumber()); 
        //结论一:多态时,当子类覆盖了父类的方法,使用子类覆盖的方法 
        //结论二:当子类覆盖父类的实例变量时,父类方法使用的是父类的 实例变量,子类方法使用的是子类的实例变量
    } 

} 

输出结果:
1
21
21










java千百问_05面向对象(008)_java中覆盖是什么

点击进入_很多其它_Java千百问1、什么是覆盖在java中,覆盖是针对继承才有的概念,某一个子类须要某些方法或属性,但又不想使用父类中的同名的方法或属性,就须要使用覆盖。直白的来说。就是在子类中编写与父类同名、同... 查看详情

java千百问_05面向对象(008)_java中覆盖是什么

点击进入_很多其它_Java千百问1、什么是覆盖在java中,覆盖是针对继承才有的概念,某一个子类须要某些方法或属性。但又不想使用父类中的同名的方法或属性。就须要使用覆盖。直白的来说,就是在子类中编写与父类同名、同... 查看详情

java千百问_03基础语法(018)_注释是什么

点击进入_更多_Java千百问1、注释是什么java中的注释和其他编程语言中的注释一样,注释的内容不会被编译运行,只是源代码中对代码的解释说明。通过添加代码注释可以提高源代码的可读性,使得Java程序条理清晰,易于区分代... 查看详情

java千百问_06数据结构(023)_基本数据类型在内存中如何存放

点击进入_更多_Java千百问1、基本数据类型在内存中如何存放了解基本数据类型看这里:java有哪8种基本数据类型对于java中的8种基本数据类型,可以通过如下方式赋值给变量赋值。inta=3;floatb=4.0f;a=a+2;8中基本数据是将具体值直接... 查看详情

java千百问_03基础语法(019)_注解是什么

点击进入_更多_Java千百问1、注解是什么java中的注解(Annotation),也叫元数据。是Java5以后版本引入的一个特性。注解与类、接口、枚举是在同一个层次,可以用来标注包、类、字段、方法、局部变量、方法参数等元素,达到对... 查看详情

java千百问_01基本概念(014)_同步异步有什么区别

点击进入_更多_Java千百问1、同步、异步有什么区别在进行网络编程时,我们通常会看到同步、异步、阻塞、非阻塞四种调用方式以及他们的组合。了解阻塞、非阻塞看这里:[阻塞、非阻塞有什么区别][2][2]:其中同步方式、异步... 查看详情

java千百问_03基础语法(020)_注解注释有什么区别

...java注释注解区别×注解与注释不同点×点击进入_更多_Java千百问1、注解、注释有什么区别了解注释看这里:注释是什么了解注解看这里:注解是什么注解和注释很多人会混淆,它们之间的应用场景和具体使用完全不同,具体如下... 查看详情

java千百问_07jvm架构(015)_xmnxmsxmxxss有什么区别

点击进入_更多_Java千百问1、XmnXmsXmxXss有什么区别首先,Xmn、Xms、Xmx、Xss都是JVM对内存的配置参数,我们可以根据不同需要区修改这些参数,以达到运行程序的最好效果。了解jvm内存管理看这里:jvm是如何管理内存的Xms、Xmx-Xms、-... 查看详情

java千百问_06数据结构(003)_什么是基本类型包装器

点击进入_更多_Java千百问1、什么是包装器包装器也叫包装类,继承于Object,可以当作8种基本数据类型的类映射,包装器可以直接转换为基本数据类型(成为拆箱)。如下:了解8种基本数据类型看这里:java有哪8种基本数据类型2... 查看详情

java千百问_02基本使用(012)_如何编写非阻塞socketchannel程序

点击进入_更多_Java千百问1、如何编写非阻塞SocketChannel程序了解Socket看这里:Socket是什么了解SocketChannel看这里:Socket、SocketChannel有什么区别使用SocketChannel的最大好处就是可以进行非阻塞IO,每次链接后都会直接返回,不会阻塞... 查看详情

java千百问_01基本概念(015)_阻塞非阻塞有什么区别

点击进入_更多_Java千百问1、阻塞、非阻塞有什么区别在进行网络编程时,我们通常会看到同步、异步、阻塞、非阻塞四种调用方式以及他们的组合。了解同步、异步看这里:同步、异步有什么区别其中阻塞方式、非阻塞方式主... 查看详情

java千百问_01基本概念(016)_32位和64位计算机有什么区别

点击进入_更多_Java千百问1、32位和64位计算机有什么区别我们通常说的32位、64位计算机是指计算机的CPU位数。当然很早还有8位、16位的CPU,以Intel的80x86系列来说,8位的8080,16位的8086、8088、80186、80286,而32位的CPU最早始于80386,... 查看详情

java千百问_06数据结构(024)_用二进制如何表示整型数值

点击进入_更多_Java千百问1、用二进制如何表示整型数值我们都知道,计算机只认识0、1二进制,我们一般操作的寄存器和存储单元也都只认识二进制,我们称一个二进制为一个bit(位),一般32位计算机的寄存器允许操作32bit的... 查看详情

java千百问_06数据结构(025)_用二进制如何表示浮点型数值

点击进入_更多_Java千百问1、用二进制如何表示浮点型数值我们再了解二进制如何表达浮点型数值前,需要先了解用二进制如何表示整型数值:用二进制如何表示整型数值由于计算机只认识0、1二进制,所以与表示整数一样,浮点... 查看详情

java基础系列--05_面向对象

1、概述:   (1)面向过程:将问题一步一步的解决的过程(详细步骤),在C语言中所有的代码都是基于过程化的代码。  (2)面向对象:面向对象是基于面向过程的编程思想,所有的事情都交由创建出来的对象去指挥。    ... 查看详情

[java初探07]__关于面向对象的简单认识

...识里,我们都会直接或间接的用到它们,这是因为Java是一门面向对象的语言,在学习类与对象的前提下,我们应当先对面向对象有所了解.我们都知道,Java语言是一门面向对象的语言,实际上类与对象,就是面向对象编程思想的重要基础.... 查看详情

2019-05-17java学习日记之面向对象_多态&抽象类&接口(代码片段)

多态 多态的概述:A:多态(polymorphic)事物存在的多种形态B:多态前提a:要有继承关系b:要有方法重写c:要有父类引用指向子类对象多态中的成员访问特点之成员变量:成员变量:编译看左边(父类),运行看左边(父... 查看详情

java面向对象入门-入门介绍

在本JavaOOPs概念教程中,我们将学习四种主要的面向对象原则--抽象、封装、继承和多态性。它们也被称为面向对象编程范式的四大支柱。_抽象_是在不考虑无关细节的情况下公开实体基本细节的过程,以降低用户的复杂性。_封... 查看详情