前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java继承(下)

Java继承(下)

作者头像
Breeze.
发布2022-04-09 14:54:31
5260
发布2022-04-09 14:54:31
举报

Object类

  • Object类是所有类的父类
  • 一个类没有使用extends关键字明确标识的继承关系,则默认继承Object类(包括数组)。
  • equals测试:
    1. 继承object中的equals方法时,比较的是两个引用是否指向的同一个对象
    2. 子列可以通过重写equals方法的形式,改变比较的内容
代码语言:javascript
复制
public class TestThree {
    public static void main(String[] args){
        //新建Animal
        Animal one=new Animal("花花",2);
        Animal two=new Animal("凡凡",2);
        //Anima=null;
        boolean flag=one.equals(two);
        System.out.println("one 和 two的引用比较:"+flag);
        System.out.println("one 和 two的引用比较:"+(one==two));
        System.out.println("======================");
        String str1=new String("Hello");
        String str2=new String("Hello");
        boolean flag1=str1.equals(str2);
        System.out.println("str1 和 str2的引用比较:"+flag1);
        System.out.println("str1 和 str2的引用比较:"+(str1==str2));
    }
}

结果:

QQ截图20220404192106
QQ截图20220404192106

重写Object

代码语言:javascript
复制
public boolean equals(Object obj){
    if(obj==null)
        return false;
    Animal temp=(Object)obj;
    if(this.getName().equals(temp.getName()) && (this.getMonth()==temp.getMonth()))
        return true;
    else
        return false;
}

重载

代码语言:javascript
复制
public boolean equals(Animal obj){
    if(obj==null)
        return false;
    if(this.getName().equals(obj.getName()) && (this.getMonth()==obj.getMonth()))
        return true;
    else
        return false;
}
QQ截图20220404195334
QQ截图20220404195334

  • toString测试:
    1. 输出对象名时,默认会直接调用类中的toString
    2. 继承Object中的toString方法时,输出对象的字符串表示形式:类型信息+@+地址信息
    3. 子类可以通过toString方法的形式,改变输出的内容及表现形式
QQ截图20220404202315
QQ截图20220404202315
代码语言:javascript
复制
System.out.println(one.toString());
System.out.println(one);

==在比较基本数据类型时,比较的是变量里存储的数值,因此,==比较的是数值是否相等;==在引用数据类型(String、自定义类等),变量里存的是对象的内存地址,因此==比较的是变量里村的是对象的内存地址。

final关键字

代码语言:javascript
复制
//final class:该类没有子类(可书写称 final publi 或 public final 没有固定)
public final class TestThree {}
//------------------------------------
//final 在方法里表示:该子类不能重写父类的方法,但是可以正常被子类继承使用
public final void eat(){}
//------------------------------------
//final 方法内局部变量:只要在具体被使用之前进行赋值即可,一单赋值不允许被修改/类中成员属性:赋值过程:1、定义直接初始化 2、构造方法 3、构造代码块
public void age(){
    final int temp;
    System.out.print("使用前赋值temp:");
    temp=10;
    System.println(temp);
}

  1. 修饰类表示不允许被继承
  2. 修饰方法表示不允许被子类重写
    1. final修饰的方法可以被继承
    2. 不能修饰构造方法
  3. 修饰变量不允许修改
    • 方法内的局部变量 》 在使用之前被初始化赋值即可
    • 类中成员变量 》 只能在定义时、构造方法、构造代码块中进行
    • 基本数据类型的变量 》 初始赋值之后不能更改
    • 引用类型的变量 》 初始化之后不能再指向另一个对象,但对象内容是可变的
  4. 可配合static使用
    1. 用来修饰方法、变量
  5. 使用final修饰可以提高性能,但会降低可扩展性

注解

@Override :注解可以认为是一个标记

代码语言:javascript
复制
    @Override    public void eat() {        super.eat();    }
  • JDK1.5版本引入的一个特性
  • 可以声明再包、类、属性、方法、局部变量、方法参数等的前面,用来对这些元素进行说明、注释
  • 按照运行机制分
    1. 源码注解:旨在源码阶段保留,再编译阶段会被丢弃
    2. 编译时注解:会在编译时期保留,再加载class文件时会被丢弃
    3. 运行时注解:再运行阶段还起作用,甚至会影响运行逻辑的注解
  • 按照来源分
    1. 来自JDK的注解
    2. 来自第三方的注解
    3. 我们自己定义的注解

© 版权声明

本博客不参与任何交易,也非中介,内容均不作直接、间接、法定、约定的保证。访问本博客请务必遵守有关互联网的相关法律、规定与规则。一旦您访问本博客,即表示您已经知晓并接受了此声明通告。

THE END

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Object类
  • final关键字
  • 注解
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档