美文网首页
java继承之简述

java继承之简述

作者: hello_mr_future | 来源:发表于2017-12-03 14:29 被阅读0次

Java的第二大特性---->继承

一、什么是继承

继承就是有一个类与另一个类的关系,也可以说一个类拥有另一个类的开放的属性和方法。举例说明就是,儿子继承父亲的资产,那么他便可以享用父亲提供给他的便利。继承中可以体现出来的是代码的复用,子类可以直接用父类定义的属性和方法。注意:java中是单继承 . 使用的方式是extends关键字

如下:

image
public class Dog extends Animal{
    }
public class Initial {
    public static void main(String [] args){
        Dog dog=new Dog();
    }
}

这便是一个继承,动物类是父类,Dog类是子类,继承了动物类,并且在Dog类中没有任何的代码语句,可以在主类中new 一个Dog对象出来,就是继承的好处所在了。

那么,问题来了。。。。

如果子类需要的方法父类提供不了怎么办?

那就是方法的重写

二、继承之方法的重写

a. 当子类所需要的父类给予不了,那么子类必须自力更生,自己实现父类的方法,当然这里也有就近原则,重写后的方法会被优先调用。没有规矩,不成方圆

重写的规则:重写的方法返回值类型、方法名、参数都要相同

image

b.举例说明方法的重写

Object是所有类的父类,想当于鼻祖之类的,如果有类没有使用extends关键字,那么默认的继承的Object.

Object中有两个方法比较有名,toString方法和equals方法

i).Object 中的 toString()方法输出的是哈希码值(对象地址字符串),用来唯一区分对象相当于人的身份证号,利用哈希算法生成的,前部分是包名,后部分是对象在内存的地址,然后我们平时输出最多的字符串就是转换成字符串,那么我们可以重写toString

image

ii).Object 中的equals方法是比较的两个引用是否指向同一块内存区域,Dog dog =new Dog()中的 dog 其实是一个引用,并不是一个被创建的对象,这里只是把对象的引用赋给了变量dog,但是我们平时进行的比较都是比较的两个对象的值是否一样,不会i去比较是否指向了同一块区域,所以我们需要重写equals方法

public class Initial{
    public static void main(String [] args){
        Dog dog=new Dog();
        Dog dog2=new Dog();
        if(dog.equals(dog2)){
            System.out.println("两个对象是相同的");
        }else{
            System.out.println("两个对象是不相同的");
        }
image

这里new 了两次意思就是创建了两个地址空间,那么肯定是不同的

这里重写了equals方法,进行判断两个对象的值是否相同

 @Override
    public boolean equals(Object obj) {
        if(this==obj)
            return true;
        if(obj==null)
            return false;
        if(obj.getClass()==obj)
            return true;
        Dog other=(Dog)obj;
        if(other.age!=((Dog) obj).age)
            return false;
        return true;
    }
image

当然了,方法的重写是按需要的,所有的重写的方法都不一定是一样的。

三、继承的初始化顺序

父类有构造方法、属性,子类也有构造方法和属性,那么到底他们是怎么样的初始化顺序的呢?

image image image image

从上面的例子可以看出来,当new 一个Dog的时候,会先执行父类的构造方法,再执行子类的构造方法;而构造方法和属性的初始化却是先执行的属性的初始化,再执行构造方法的初始化(先执行的被覆盖了,结果中便是后执行的)。所以他们的初始化的顺序是:

父类的属性初始化-----》父类的构造方法初始化--------》子类的属性初始化---------》子类的构造方法初始化

四、继承之final关键字

final 关键字可以修饰类、方法、属性、变量

a.当final 修饰类时表示这个类不能被继承

b.当final 修饰方法时表示这个方法不能被重写(覆盖)

c.当final 修饰属性时,在声明的时候和构造方法中须有一处对其进行初始化,不然的话编译器会报错(编译器会对普通的属性或者变量进行隐式初始化)。

d.当final 修饰变量时,则为常量,后面不可修改。

final表示的就是最终的,最后的

五、继承之super关键字

super在子类的内部使用,代表的是父类对象,那么可以使用super 获取父类的属性和方法,分别为:super.属性和super.方法

注意:super 关键字与其构造方法有一定的关系

a.如果父类的构造方法是无参的构造方法,子类的构造方法中隐式调用了super(),当然也可以显示调用,并且在构造方法的第一行

b.如果在父类中的构造方法是自定义的有参的构造方法,那么在子类中必须显式的调用有参的构造方法,如下图

image image

c.如果子类构造方法中既没有显式的调用父类的构造方法,父类中也没有无参的构造方法,那么编译器会报错。

以上便是总结的java的继承这一大特性。

相关文章

  • java继承之简述

    Java的第二大特性---->继承 一、什么是继承 继承就是有一个类与另一个类的关系,也可以说一个类拥有另一个类的...

  • 自定义注解@interface

    一、简述 使用@interface自定义注解时,自动继承了java.lang.annotation.Annotat...

  • java培训专家介绍java的特性之:继承

    java培训专家介绍java的特性之:继承 什么是继承?java特性继承又是什么?在线教育平台专家为你解答! 多个...

  • Set——你真的了解吗?

    JAVA 基础 :Set——你真的了解吗? 简述 Set 继承于 Collection ,是一种集合。有元素无序、...

  • Java应考

    简述Java中实现线程的两种方式,并分别举例 1、继承Thread类 步骤:创建一个继承Thread类的子类,复写...

  • 顶级父类java.lang.Object的九个方法

    一、简述 Object类是除自己外所有java类的终极父类。当然,数组也继承了Object类。然而,接口是不继承O...

  • JavaSE之继承

    简述继承 Java中是单继承模式: 一个父类可以有多个子类,但是一个子类只能有一个父类。 继承:public cl...

  • java api系列之HashMap

    java api系列目录 java api系列 java api系列之HashMap 简述 首先看一下官方文档是怎...

  • Java之继承

    继承的概念 继承的格式 继承示例 继承中成员变量的访问特点 继承中成员方法的访问特点

  • Java之继承

    继承 关键字:extends继承的作用:为了实现代码复用。对于所有子类,将公有的属性和方法定义在父类中,子类通过继...

网友评论

      本文标题:java继承之简述

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