`

覆盖与重载

阅读更多

[恶补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方法覆盖与重载的区别

    Java 中方法的重载与覆盖

    方法的重载与覆盖 发生重载的条件: 1、在使用重载时只能通过不同的参数样式。例如,不同的参数类型,不同的参数个数,不同的参数顺序(当然,同一方法内的几个参数类型必须不一样,例如可以是fun(int, float), ...

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

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

    C++函数的重载和覆盖

    一个技术文档,记录一些关于C++方面的函数的重载和覆盖方法,可供参考

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

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

    重载,重写,覆盖,多态

    重载,重写,覆盖,多态的深刻剖析,具体分析了重载,重写,覆盖,多态之间的区别

    java中函数重载与覆盖例子

    java中函数重载与覆盖的例子,person类和teacher类

    虚函数与函数重载实验

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

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

    Java语言中的覆盖重载和多态,方法的多态,类型的多态,多态的优点,覆盖(override)识别标志,方法的重载,构造函数的重载,重载的好处,重载与覆盖的比较,编译时多态和运行时多态

    重载与覆写/重写的区别

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

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

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

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

    要弄清楚重载、覆盖、多态与函数隐藏之间的复杂且微妙关系。这是C++基本功,几个概念容易混淆,易于掌握,要多运用。

    c++ 重载、覆盖、重写

    这篇文章主要介绍了C++中重载、重写(覆盖)和隐藏的区别,是C++面向对象程序设计非常重要的概念,需要的朋友可以参考下

    类成员函数的重载、覆盖和隐藏

    类成员函数的重载、覆盖和隐藏区别以及抽象类等

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

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

    彻底学习Java语言中的覆盖和重载

    彻底学习Java语言中的覆盖和重载

    重载、覆盖和隐藏

    重载、覆盖和隐藏

    java学习笔记 继承 重载 覆盖

    java相关知识的学习笔记,个人整理,里面涵盖:继承,接口,重载,覆盖,final等等的知识点

    C#重写重载与多态

    重载:用于在给定了参数列表和一组候选函数成员的情况下,选择一个最佳函数成员来实施调用。多态:c#的多态性主要体现在类的继承上:子类继承父类的时候,可能出现同名但方法定义不同的情况, 所以在子类中会将原方法...

Global site tag (gtag.js) - Google Analytics