`

覆盖与重载

阅读更多

[恶补JAVA]关于覆盖与重载

JAVA不允许多重继承,但允许间接继承,如C继承了B,同时B又继承了A那么就拥有类A和B的属性及方法。
以前在学习JAVA基础的时候,总以为单一个类继承了另一个类的时候,继承类
就拥有了被继承类的除private关键字修饰外的所有方法和属性。
其实不然,继承它可以分为两种情况:
一、 当继承类和被继续类位于同一包中时。
子类会继承父类中的public 、protected 和默认访问级别的成叫变量和方法。
二、 当继承类和被继续类不在同一包中时
子类会继承父类中的public 、protected 访问级别的成叫变量和方法。
如以下两个类,Base和Sub,base为Sub的父类。
在同一包时:
Java代码 复制代码
  1. package base;   
  2.   
  3. public class Base {   
  4.     public int publicBase = 1 ;         //public访问级别   
  5.     private int privateBase = 1;        //private访问级别   
  6.     int defaultBase = 1;                //默认访问级别   
  7.        
  8.     protected void protecteMethodofBase() {  //protected访问级别   
  9.        
  10.     }   
  11. }   
  12.   
  13. package base;   
  14.   
  15.   
  16. public class Sub extends Base {   
  17.     protected void protecteMethodofSub() {  //protected访问级别   
  18.         System.out.println(publicBase);   
  19.         System.out.println(privateBase);//报错,私有的不能继承。   
  20.         System.out.println(defaultBase);   
  21.            
  22.         protecteMethodofBase();   
  23.     }   
  24.        
  25.     public static void main(String args[]){   
  26.         Sub sub = new Sub();   
  27.         sub.protecteMethodofSub();   
  28.     }   
  29. }  
package base;

public class Base {
    public int publicBase = 1 ;         //public访问级别
    private int privateBase = 1;        //private访问级别
    int defaultBase = 1;                //默认访问级别
    
    protected void protecteMethodofBase() {  //protected访问级别
    
    }
}

package base;


public class Sub extends Base {
    protected void protecteMethodofSub() {  //protected访问级别
        System.out.println(publicBase);
        System.out.println(privateBase);//报错,私有的不能继承。
        System.out.println(defaultBase);
        
        protecteMethodofBase();
    }
    
    public static void main(String args[]){
        Sub sub = new Sub();
        sub.protecteMethodofSub();
    }
}


只有私有的方法不能继承。

在不同的包时:我们把Sub类的包改为sub时
Java代码 复制代码
  1. package sub;   
  2.   
  3. import base.Base;   
  4.   
  5.   
  6. public class Sub extends Base {   
  7.     protected void protecteMethodofSub() {  //protected访问级别   
  8.         System.out.println(publicBase);   
  9.         System.out.println(privateBase);//报错,私有的不能继承。   
  10.         System.out.println(defaultBase);//报错,不在同一包下默认级别不能继承。   
  11.            
  12.         protecteMethodofBase();   
  13.     }   
  14.        
  15.     public static void main(String args[]){   
  16.         Sub sub = new Sub();   
  17.         sub.protecteMethodofSub();   
  18.     }   
  19. }  
package sub;

import base.Base;


public class Sub extends Base {
    protected void protecteMethodofSub() {  //protected访问级别
        System.out.println(publicBase);
        System.out.println(privateBase);//报错,私有的不能继承。
        System.out.println(defaultBase);//报错,不在同一包下默认级别不能继承。
        
        protecteMethodofBase();
    }
    
    public static void main(String args[]){
        Sub sub = new Sub();
        sub.protecteMethodofSub();
    }
}


方法重载(Overload)
类的同一种功能可以有多种方法,当一个类中多少方法具有相同的方法名,却含有不同的方法参数则为方法的重载(Overload)如:
Java代码 复制代码
  1.     Public void getString(String str){   
  2.         return str ;   
  3. }   
  4.   
  5. Public void getString(String str,String str1){   
  6.         return str + str1;   
  7. }  
	Public void getString(String str){
		return str ;
}

Public void getString(String str,String str1){
		return str + str1;
}


当从父类中继承了某个方法,如果两个方法名相同,却有不同参数时,可以说一个方法是另一个方法的重载。
重载必须满足以下条件。
1、 方法名相同。
2、 方法的参数,个数,顺序至少有一个不同。
3、 方法的返回类型可以相同,也可以不相同。


方法的覆盖(Override)
如果子类中,定义的一个方法,其名称、返回类型、以及参数与父类中的某个方法相匹配,则该子类重写的父类的方法。
覆盖方法必须满足以下条件。
1、 子类方法的名称、参数、返回类型必须与父类方法一致。
2、 子类方法不能缩小父类方法的访问权限。
3、 子类方法不能抛出比父类方法更多的异常。也就是说子类方法抛出的异常必须与父类方法抛出的异常相同或者是子类方法抛出的异常是父类抛出异常的子类。
4、 方法的覆盖只能存在与父类与子类,同一类中只存在方法的重载,不存在方法的覆盖。
5、 父类中的私有方法不能补覆盖。
6、 父类中的非抽象方法,可以被覆盖为抽象方法。


this与super的区别
this表示调用当前类的属性或方法,也可以用this当前类本身。
super表示调用父类的方法或属性。
父类中的成员变量或方法为私有的(private)时,super不能调用到。
分享到:
评论

相关推荐

    JAVA方法覆盖与重载的区别.doc

    Java中的方法重载(Overloading)和方法覆盖(Overriding)是面向对象编程中的两个重要概念,它们在处理多态性方面发挥着关键作用。理解这两者的区别对于编写高效的Java代码至关重要。 首先,我们来看方法重载。...

    Java 中方法的重载与覆盖

    ### Java中的方法重载(Overloading)与方法覆盖(Overriding) #### 方法的重载(Overloading) 在Java中,方法重载允许我们定义多个同名的方法,但这些方法之间必须具备不同的特征来区分它们。这有助于提高代码的...

    函数重载和覆盖的区别.doc

    ### 函数重载和覆盖的区别 #### 一、引言 在编程领域,函数重载(Overloading)和覆盖(Overriding)是两种常见的多态性实现方式,它们允许程序员在代码中创建更加灵活和复用性强的功能。尽管两者名称相似,但它们...

    C++函数的重载和覆盖

    重载与覆盖的区别 - **作用范围**:函数重载发生在同一作用域内,如一个类或全局作用域;函数覆盖发生在继承层次结构中。 - **参数列表**:重载函数必须有不同的参数列表;覆盖函数的参数列表必须与被覆盖函数相同...

    Java语言中的 覆盖重载和多态

    **重载与覆盖的比较** - 覆盖不改变参数列表,而重载必须改变参数列表。 - 覆盖不能改变返回值类型,而重载可以。 - 覆盖不能有更严格的访问修饰符,但重载可以。 - 构造函数不能被覆盖,但可以被重载。 - `final`,...

    java中函数重载与覆盖例子

    在"Java函数重载与覆盖"的例子中,我们可能会看到如下代码: ```java public class Person { public void sayHello(String name) { System.out.println("Hello, " + name); } public void sayHello(int age) ...

    重载、覆盖、多态与函数隐藏

    掌握重载、覆盖、多态与函数隐藏之间的差异和应用是编写灵活、可维护的C++代码的基础。在实际编程中,正确使用这些特性可以帮助开发者更好地管理代码的复杂性,使得代码结构清晰,易于扩展和维护。同时,正确理解...

    delphi动态虚拟覆盖重载重定义的区别

    DELPHI中方法的类型及其覆盖、重载 1、静态方法是方法的缺省类型,对它就像对通常的过程和函数那样调用,编译器知道这些方法的地址,所以... delphi动态虚拟覆盖重载重定义的区别 (www.ip8000.com www.sql8.net)

    c++ 重载、覆盖、重写

    #### 五、重载与重写的区别 1. **范围:** 重写发生在不同的类之间(通常是基类和派生类),而重载发生在同一个类中。 2. **参数列表:** 重写要求函数的参数列表完全相同,而重载则允许参数列表不同。 3. **虚函数...

    虚函数与函数重载实验

    熟悉并掌握继承与派生、虚函数(函数覆盖)、函数重载技术的使用 通过实例了解函数覆盖和函数重载之间的区别 实验前先复习“类与对象”、“派生与继承”、“多态性”部分的内容。 完成以下实验内容。在Visual ...

    C#中的重载与覆盖例子

    ### C#中的重载与覆盖例子 在C#编程语言中,重载(Overload)与覆盖(Override)是两种非常重要的多态性实现方式。本文将通过一个具体的示例来详细解释这两种概念,并探讨它们在实际编程中的应用。 #### 一、重载...

    重载,重写,覆盖,多态

    ### 重载、重写、覆盖与多态的深刻剖析 在面向对象编程语言中,如Java、C#等,重载(Overloading)、重写(Overriding)、覆盖(也称为重写)以及多态(Polymorphism)是几个非常重要的概念。它们之间既有关联又有...

    重载与覆写/重写的区别

    重载与覆写/重写的区别 区别 重载 覆写 1 单词 OverLoading Override 2 概念 方法名称相同,参数的类型或个数不同 方法名称相同,参数的类型或个数相 同,返回值类型相同 3 范围 发生在一个类之中...

    重载、覆盖和隐藏

    ### 重载、覆盖和隐藏:面向对象编程中的三大概念 在面向对象编程中,类成员函数的重载(Overloading)、覆盖(Overriding)和隐藏(Hiding)是三个非常重要的概念,它们帮助程序员更好地管理和扩展代码。下面将...

    C++成员函数的重载、覆盖与隐藏

    文件详细描述了C++成员函数的重载、覆盖与隐藏技术,对于初学C++的人员很有帮准,也是我们程序猿参考、学习的重要资料。

    Java方法继承、方法重载、方法覆盖总结

    ### Java方法继承、方法重载、方法覆盖总结 在Java编程语言中,方法继承、方法重载、方法覆盖是三个非常重要的概念。它们之间既有关联又有区别,掌握这些概念对于深入理解面向对象编程有着至关重要的作用。 #### ...

    C++中的多态、重载、覆盖与隐藏

    上网看C++的一些资料,突然看到虚函数,突然让我回想起继承,覆盖什么的,决定总结一些资料,加上自己的体会写一篇。  1、C++中的虚函数(virtual function)  虚函数是C++中用于实现多态(polymorphism)的...

Global site tag (gtag.js) - Google Analytics