Java 覆写

  继承性的主要特征是子类可以根据父类已有的功能进行功能扩展,但是在子类定义属性或方法的时候有可能定义属性和方法和父类同名,在此类情况下就称为:“覆写”。

方法的覆写:【改良原本功能不足的方法】

子类定义的方法与父类方法名称相同、参数的类型及个数、返回值相同的方法。

class A {

         public void fun() {

                   System.out.println("A.fun()方法") ;

         }

}

class B extends A {

         public void fun() {

                   System.out.println("B.fun()方法") ;

         }

}

public class TestAB {

         public static void main(String args[]) {

                   B b = new B() ;

                   b.fun() ;

         }

}

当发生覆写之后,此时会调用实例化子类中被覆写的方法;{注意:覆写的方法,要和父类的一模一样才可以称为覆写操作}

  一个类可能会产生(被继承)多个子类,那么每个子类都会有一个自己的代码方法,子类被实例化后只会执行自己被覆写的方法。【没有被覆写的方法,则调用父类的方法】

  但是被覆写的方法不能拥有比父类更严格的访问控制权限

  访问控制权限:     Public  >  default  >  private(最严格的)

  同理:如果父类使用了public,子类的覆写方法只能是public;如果父类使用了default,子类的覆写方法只能是public和default ……

class A {

         public void fun() {

                   print() ;

         }

         public void print() {

                   System.out.println("A") ;

         }

}

class B extends A {

         public void print() {

              System.out.println("B") ;

         }

}

public class TestAB {

         public static void main(String args[]) {

                   B b = new B() ;

                   b.fun() ;

         }

}

说明:实例化子类B,所以fun方法是在B类中执行的,调用的就是B类中的print方法;

class A {

         public void fun() {

                   print() ;

         }

         private void print() {

                   System.out.println("A") ;

         }

}

class B extends A {

         public void print() {

                   System.out.println("B") ;

         }

}

public class TestAB {

         public static void main(String args[]) {

                   B b = new B() ;

                   b.fun() ;

         }

}

说明:这个例子中,就会发现子类中根本没有覆写print()方法,也就是说使用了private对于子类而言是不可见的,就算子类定义一个符合要求的覆写语句,也不可以发生覆写;这个时候子类使用的方法,实际上就相当于子类自己定义了一个新的方法而已。

覆写之后,默认情况下子类所能够调用的一定是被覆写过的方法,如果还想调用父类中的方法,可以使用super.* 关键字;

class A {

              public void fun() {

                   print() ;

              }

              public void print() {

                   System.out.println("A") ;

              }

}

class B extends A {

              public void print() {

                   super.print() ;

                   System.out.println("B") ;

              }

}

public class TestAB {

              public static void main(String args[]) {

                   B b = new B() ;

                   b.fun() ;

              }

}

super()和this()问题研究:

1、 super(参数):调用基类(父类)中的某一个构造函数(默认)

2、  this(参数):调用本类中的另一种形成的构造函数

3、  super()和this()都在构造函数第一行,但不可以同时存在

4、 super:引用当前对象的直接父类的成员(用来访问父类中的隐式继承属性和方法函数)

5、  this:表示引用当前对象名,调用的只是本类中的属性和方法函数

—   this()和super()都要在构造函数的首行。

面试题:解释重载与覆写的区别?(Overloading与Overrid的区别)

区别

重载

覆写

名字

Overloading

Overrid

范围

发生在一个类中

发生在子类和父类之中

定义

方法名称、参数类型及个数相同

方法名称、参数类型、个数、方法返回值相同

权限

没有权限的限制

被覆写的方法不能拥有比父类严格的访问控制权限

在Overloading时,返回值类型是否可以不同?

   在发生重载的时候,返回值类型可以不同,但是考虑到程序设计的统一性,重载时,尽量保证返回值类型相同。

 

属性覆盖:【无意义】

    如果子类定义了和父类完全相同的属性名称的时候,就称为属性的覆盖。

class A {

    String info = "Hello" ;

}

class B extends A {

    int info = 100 ;

    public void print() {

        System.out.println(this.info) ;  //查找本类中的info

        System.out.println(super.info); //查找父类的info

    }

}

public class TestAB {

    public static void main(String args[]) {

        B b = new B() ;

        b.print() ;

    }

}

·发生继承关系后,就会应用覆写操作,覆写的应用主要以 方法覆写 为主;

·如果子类需要使用父类指定的方法,但是发现父类的方法不能满足功能需求,就可以利用覆写方法,来完善父类方法的功能的同时保留父类的方法不被改变。

·被子类覆写的方法不能拥有比父类更为严格的访问控制权限。

Java 覆写初探的更多相关文章

  1. java覆写hashcode方法

    覆写hashcode 1. 把某个非零常数值,例如17,保存在int变量result中: 2. 对于对象中每一个关键域f(指equals方法中考虑的每一个域): 3, boolean型,计算(f? 0 ...

  2. java覆写equals方法

    何时需要重写equals() 当一个类有自己特有的“逻辑相等”概念(不同于对象身份的概念). object规范规定,如果要重写equals(),也要重写hashcode() 如何覆写equals() ...

  3. JAVA覆写Request过滤XSS跨站脚本攻击

    注:本文非本人原著. demo的地址:链接:http://pan.baidu.com/s/1miEmHMo 密码:k5ca 如何过滤Xss跨站脚本攻击,我想,Xss跨站脚本攻击令人为之头疼.为什么呢. ...

  4. 【转】 Java多态特性:重载和覆写的比较

    Java重载: 在同一个类中 方法具有相同的名字,相同或不同的返回值,但参数不同的多个方法(参数个数或参数类型) public class MethoDemo{ public static void ...

  5. Java多态特性:重载和覆写的比較

    Java重载: 在同一个类中 方法具有同样的名字,同样或不同的返回值,但參数不同的多个方法(參数个数或參数类型) public class MethoDemo{ public static void ...

  6. JAVA继承与覆写

    实例:数组操作 首先是开发一个整型数组父类,要求从外部控制数组长度,并实现保存数据以及输出.然后子类中实现排序和反转. 基础父类代码如下: class Array { private int data ...

  7. 黑马程序员——JAVA基础之简述 类的继承、覆写

    ------- android培训.java培训.期待与您交流! ---------- 继承的概述: 多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只 ...

  8. JAVA中继承时方法的重载(overload)与重写/覆写(override)

    JAVA继承时方法的重载(overload)与重写/覆写(override) 重载-Override 函数的方法参数个数或类型不一致,称为方法的重载. 从含义上说,只要求参数的个数或参数的类型不一致就 ...

  9. [改善Java代码]不要覆写静态方法

    建议33: 不要覆写静态方法 我们知道在Java中可以通过覆写(Override)来增强或减弱父类的方法和行为,但覆写是针对非静态方法(也叫做实例方法,只有生成实例才能调用的方法)的,不能针对静态方法 ...

随机推荐

  1. Eclipse连接数据库

    原创 操作数据库之前首先得连接数据库,连接数据库的步骤如下: 将驱动包导入JDK中 将sqljdbc4.jar(一个举例)类库文件拷贝到D:\Program Files\Java\jdk1.7.0\j ...

  2. 微信小程序实例代码

    http://blog.csdn.net/zuoliangzhu/article/details/53862576#t1 项目结构 └─ empty-folder/ ················· ...

  3. 使用Amazon Simple Queue Service(SQS) 实现简单的消息服务

    一  引言 亚马逊Amazon作为云计算的领跑者推出了很多云服务,最近因为项目的原因,需要用到SQS服务,因此简要地写下这篇随笔,一来方便以后查阅,二来方便共享一些简单的操作. SQS即可以理解为一个 ...

  4. [Erlang05]gen_server怎么去写eunit?

    Prework: 怎样写一个基本的Eunit? Doc. 1. 加入头文件:声明此模块以”_test”结尾的函数都是测试用,并在编译时自动在这个模块里加入test()函数(当然这个可以用宏来控制) - ...

  5. c++调用c#写的DLL

    c++调用c#写的DLL: 此文章演示了建立c#的dll: c++建立工程,引入dll: 不能解决的问题: 指定dll的路径,在代码里面直接写 #using "xxx.dll" 必 ...

  6. mvc - Authorize授权

    from : http://www.cnblogs.com/asks/p/4372783.html http://www.cnblogs.com/myindex/p/5479428.html

  7. luoguP3702 [SDOI2017]序列计数

    https://www.luogu.org/problemnew/show/P3702 题目让我们在 $ [1, m] $ 从中选出 $ n $ 个数,当中要有 > $ 0 $ 个质数,和是 $ ...

  8. POJ 3522 最小差值生成树(LCT)

    题目大意:给出一个n个节点的图,求最大边权值减去最小边权值最小的生成树. 题解 Flash Hu大佬一如既往地强 先把边从小到大排序 然后依次加入每一条边 如果已经连通就把路径上权值最小的边删去 然后 ...

  9. [ActionScript 3.0] 实现放大镜效果的简单方法

    //mc和bgmc是同一对象的不同实例 //mc放大的对象 //bgmc源对象 //mag放大镜 var scale:Number = 1.3;//放大倍数 mc.mask = mag; mag.st ...

  10. shell中tr的用法

    转自http://blog.csdn.net/zhuying_linux/article/details/6825568 tr(translate缩写)主要用于删除文件中的控制字符,或进行字符转换.语 ...