了解java中的super、object、final

了解java中的super、object、final

super

在Java中,super关键字用于引用父类的成员(变量、方法、构造方法),以及调用父类的构造函数。它主要有两种用法:

  1. 访问父类的成员: 当子类和父类有同名成员时,可以使用super关键字来访问父类的成员。例如:

    class Parent {
        int x = 10;
        void display() {
            System.out.println("Parent class");
        }
    }
    
    class Child extends Parent {
        int x = 20;
        void display() {
            System.out.println("Child class");
        }
        void print() {
            System.out.println("Value of x in Parent: " + super.x); // 访问父类的成员
            super.display(); // 调用父类的方法
        }
    }
    
    
  2. 调用父类的构造函数: 在子类的构造函数中,可以使用super()来调用父类的构造函数。如果不显式地调用,则会隐式调用父类的默认构造函数(如果存在)。例如:

    class Parent {
        Parent() {
            System.out.println("Parent constructor");
        }
    }
    
    class Child extends Parent {
        Child() {
            super(); // 调用父类的构造函数
            System.out.println("Child constructor");
        }
    }
    
    

    这样,当创建子类的对象时,会首先调用父类的构造函数,然后再调用子类的构造函数。

注意:

通过super调用父类构造方法的代码必须位于子类构造方法的第一行,并且只能出现一次,否则程序在编译期间就会报错。

Object类

object类是所有类的父类,即每一个类都直接或间接继承自该类,因此object类通常被称为超类、基类或根类。当定义一个类时,如果没有使用extends关键字为这个类显示地指定父类,那么该类会默认继承Object类。

object类的常用方法

  1. toString(): 返回对象的字符串表示形式。默认实现返回的是类名和对象的哈希码。

    public String toString()
    
  2. equals(Object obj): 判断当前对象是否与另一个对象相等。默认实现是比较对象的引用是否相同。

    public boolean equals(Object obj)
    
  3. hashCode(): 返回对象的哈希码。默认实现返回的是对象的内存地址。

    public int hashCode()
    
  4. getClass(): 返回对象的运行时类。通常用于获取对象的类类型。

    public final Class<?> getClass()
    
  5. clone(): 创建并返回对象的一个副本。默认实现是浅拷贝。

    protected Object clone() throws CloneNotSupportedException
    
  6. finalize(): 在对象被垃圾回收器回收之前调用。一般不推荐使用。

    protected void finalize() throws Throwable
    
  7. notify(), notifyAll(), wait(): 用于线程间的通信,常与synchronized关键字一起使用。

    public final void notify()
    public final void notifyAll()
    public final void wait() throws InterruptedException
    public final void wait(long timeout) throws InterruptedException
    public final void wait(long timeout, int nanos) throws InterruptedException
    

    这些方法是Object类的一部分,它们可以被所有的Java类继承和使用。在实际编程中,通常会重写toString()、equals()和hashCode()方法,以便更好地适应具体的业务需求。

final关键字

在Java中,final是一个关键字,它可以应用在类、方法和变量上,具有不同的含义和用途。

  1. final类:如果一个类被声明为final,则表示该类不能被其他类继承。这样的类通常用于不希望有子类继承或修改的情况,如String类就是一个典型的final类。

    final class MyFinalClass {
        // 类的成员和方法
    }
    
  2. final方法:如果一个方法被声明为final,则表示该方法不能被子类重写(覆盖)。这在设计类时可以用于确保某个方法的实现不会被修改。

    class Parent {
        public final void myMethod() {
            // 方法实现
        }
    }
    
  3. final变量:对于变量,final关键字表示该变量的值只能被赋值一次,之后就不能再修改。对于基本类型,这意味着其数值不能被改变;对于引用类型,表示其引用的对象不能被更改,但对象本身的属性是可以被修改的。

    final int myVariable = 10; // 基本类型的final变量
    
    final MyClass myObject = new MyClass(); // 引用类型的final变量
    

在多线程环境下,使用final变量还可以保证可见性和禁止重排序,这对于实现线程安全非常有用。

总的来说,final关键字用于表示不可变性和稳定性,可以在类、方法和变量上使用,有助于提高程序的可靠性和安全性。

  • 7
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值