Java继承

单根继承

Java的类是单根继承
这是啥意思呢,看一个例子:

public class handsome {
  String name;
  public void sayMyName() {
    System.out.println("我叫" + name + "我很帅");
  }
}

我们声明一个handsome类,其实上面的写法和这个是一样的

public class handsome extends Object {
  String name;
  public void sayMyName() {
      System.out.println("我叫" + name + "我很帅");
 }
}

当你再Java中声明一个类是时候,哪怕你什么都不写它也隐式的继承了Object并且它一次只能继承一个类,如果它继承了

public class handsome extends Chinese, Australian{
  String name;
  public void sayMyName() {
    System.out.println("我叫" + name + "我很帅");
  }
}

比如这样又继承Chinese又继承Australian的handsome类在Java世界是不能创建的
多重继承可以用默认接口来实现,我现在也不知道这是啥,后面再看吧.

类的结构与初始化顺序

假设Chinese这个类有name属性,但是没有sayMyName这个方法,
用上面那个例子,我们来合并一下代码:

public class handsome extends Chinese{
  public handsome(){
    super(name)
  }
  public void sayMyName() {
    System.out.println("我叫" + name + "我很帅");
  }
}

我们在handsome的构造器中调用了super,super会帮我们调用父类的构造器
那么当我们实例化一个继承了父类的子类时初始化的顺序是什么样的呢?

初始化顺序自顶向下(老祖宗会最先被创建):

  1. 初始化数据
  2. 执行父类初始化块
  3. 执行父类的constructor
  4. 然后再执行子类的初始化

方法覆盖(Override)

这次我们假设Chinese这个类有sayMyName这个方法,现在我们要覆盖父类的这个方法应该怎么办呢?

public class handsome extends Chinese{
  public handsome(){
    super(name)
  }
  @Override
  public void sayMyName() {
    System.out.println("我叫" + name + "我很帅");
  }
}

我们可以这样重写这个方法

向上/向下转型

一个子类的类型的对象一定是一个父类类型的对象
(特例:null不是任何类型的对象)

当需要一个父类类型的值时,总是传一个子类类型

所有的子类都是父类的实例

必须进行转型的情况:

子类转父类是安全的
父类转子类是不安全的要进行强制类型转换

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 父类 static 块 1 执行 父类 静态成员staticSam1初始化 父类 静态成员staticSam2初始...
    YCix阅读 5,114评论 0 0
  • 如果文章对你有所帮助,请点喜欢并关注,这将是我最大的动力,谢谢 继承 为什么要继承 说到OOP(面向对象)的特点,...
    光哥很霸气阅读 9,178评论 0 14
  • 一、继承 概述继承是面向对象的重要特征之一,当多个类中存在相同的属性和行为时,将这些内容抽取到单独一个类中,那多个...
    java部落阅读 3,851评论 0 0
  • 现在市面上流传着这样一种说法:当你对暧昧对象忽冷忽热吊足胃口时,TA反而会对你产生极大兴趣。 这简直是放屁。 不知...
    小脚丫头片子阅读 1,612评论 2 15
  • 元宵佳节,烟花绽放的节日,我们相遇在成都电视台339,初见时都怀揣着对烟花的美好,怀揣着对美好事物的向往。 路上堵...
    0b45817aebd4阅读 916评论 0 1