覆写

作者: 曾梦想仗剑天涯 | 来源:发表于2020-10-27 16:34 被阅读0次

方法覆写

  • 子类和父类一旦产生了继承关系,子类就会继承父类中的全部定义,但是这里面也有可能出现不合适的场景,子类如果发现父类中设计不足并且需要保留有父类中的方法或者属性名称的情况下就会发生覆写
  • 当我们子类定义了与父类方法名称相同,参数类型及个数完全相同的时候,就称为方法的覆写
/**
  由于现在实例化的是子类(DataBaseChannel)对象
  所以此时调用的方法一定是被子类覆写过的方法
  如果该方法没有被覆写过,那么将调用父类中提供的方法
  覆写的意义在于优化父类的功能
*/
class Channel {
  public void connect() {
    System.out.println("【Channel父类】进行资源的连接");
  }
}
class DataBaseChannel extends Channel {
  public void connect() {
    //super.connect();    在子类进行方法覆写之后如果想要继续调用父类中的方法必须使用super.方法()
    System.out.println("【子类】进行数据库资源连接");
  }
}
public class JavaDemo {
  public static void main(String args []) {
    DataBaseChannel channel = new DataBaseChannel();
    channel.connect();
  }
}

方法覆写的限制

  • 被覆写的方法不能拥有比父类方法更为严格的访问控制权限
    • public > defalut > private
//父类是public 子类是 default,这样是错误的
void connect() {}
No. 区别 Overloading Override
1 中文含义 重载 覆写
2 概念 方法名称相同,参数的类型及个数不同 方法名称、参数类型及个数都相同
3 权限 没有权限限制 被覆写的方法不能拥有更严格的控制权限
4 范围 发生在一个类中 发生在继承关系类中

属性覆盖

  • 当子类定义与父类相同名称的成员的时候称为属性覆盖
class Channel {
  String str = "hi";
  //private String str = "hi";
  //public String getInfo() {
  //  return this.str;
  //}
}
class DataBaseChannel extends Channel {
  String str = "Hello";
  public void fun() {
    System.out.println(super.str);
    //System.out.println(super.getInfo());
    System.out.println(this.str);
  }
}
public class JavaDemo {
  public static void main(String args []) {
    DataBaseChannel channel = new DataBaseChannel();
    channel.fun();
  }
}
  • 如果对属性进行了封装,那么子类就合父类的私有属性没有关系了,即便名称一样,也只是相当于子类定义了一个新的属性而已

  • this和super的区别

    • this先查找本类中的属性和方法,如果找不到则会从父类查找,使用super则是直接查找父类
    • this与super都可以进行构造方法的调用,this()是调用的本类构造,super()调用的是子类调用父类构造,两个语句都应该放在构造方法的首行,所以不能同时存在
    • this可以表示当前对象,super没有这种概念

final关键字

  • final在程序之中描述的是终结器的概念,在Java中使用final关键字可以实现如下功能:
    • 定义不能够被继承的类
    • 定义不能够被覆写的方法、常量
//final定义不可继承的类
final class Channel {}
class DataBaseChannel extends Channel {}    //错误的 无法继承
//final定义不可覆写的方法
class Channel {
  public final void connect() {}
}
class DataBaseChannel extends Channel {
  public void connect() {}    //错误的 无法覆写
}
//final定义常量,定义之后不可修改
final class Channel {
  private final int ON = 1;
}
  • 常量往往是公共的,所以为了体现出共享的概念,会用public static final 来定义全局常量
//在定义全局常量时每一个字母都必须大写
public static final int ON = 1;
public static final int OFF = 0;

相关文章

  • 覆写

    概念:如果子类重写了父类:属性的覆盖与方法的覆写 方法的复写:子类定义了与父类方法名称,参数类型以及个数完全相同的...

  • 覆写

  • 覆写

    现在已经清楚了继承的基本概念,那么此时就有可能出现这样的一种情况,如果子类现在定义了与父类相同的方法或者是属性的时...

  • 覆写

    方法覆写 子类和父类一旦产生了继承关系,子类就会继承父类中的全部定义,但是这里面也有可能出现不合适的场景,子类如果...

  • 方法覆写

    子类与父类一旦产生了继承关系之后,实际上子类 会继承父类中的全部定义,但是这里面也有可能出现不合适的场景。如果发现...

  • 覆写hashCode

    在比较两个实例是否相等的时候,通常会覆写equal()方法,然后对类对象的每一成员进行逐一比较,但是JavaSE6...

  • GOT表覆写技术

    GOT表:概念:每一个外部定义的符号在全局偏移表(Global offset Table)中有相应的条目,GOT位...

  • Override方法参数覆写

    方法返回值参数可以通过继承的方式覆写

  • UINavgationController中覆写preferr

    *UINavigationController不会将 preferredStatusBarStyle方法调用转给它...

  • UINavgationController中覆写preferre

    文章转载自:https://blog.csdn.net/qq_27633421/article/details/1...

网友评论

      本文标题:覆写

      本文链接:https://www.haomeiwen.com/subject/zruxvktx.html