Java方法重写,匿名对象,抽象类

1-方法重写

  • 什么是方法重写 ?

    • 子类和父类出现了一模一样的方法的声明(方法名 , 参数列表)

  • 为什么要学习方法重写 ?

    • 当子类需要使用父类的功能 , 但是父类的功能又满足不了子类 , 那么子类需要重写 , 这样既可以使用父类的功能 ,也可以增加新的功能

  • 如果进行方法重写 ?

    • 子类和父类的方法声明一样 , 方法体中的内容重新定义

  • Override注解是做什么的,有什么用?

    • @Override是放在重写后的方法上,作为重写是否正确的校验注解,加上该注解后如果重写错误,编译阶段会出现错误提示。建议重写方法都加@Override注解,代码安全,优雅!

    • 如何使用Override

@Override 是一个注解,用于告诉编译器,当前的方法是重写(覆盖)父类或者接口中的方法。它通常用于增强代码的可读性和可维护性,同时也有助于捕获一些常见的错误,比如拼写错误或者意外地不小心改变了方法签名。

使用方法

在Java中,当你打算重写一个父类或者接口中的方法时,可以在方法的声明前添加 @Override 注解。具体步骤如下:

  1. 确保方法签名正确: 确保你的方法签名(方法名、参数类型和个数、返回类型)与父类或接口中的方法签名完全一致。

  2. 添加 @Override 注解: 在方法的声明行前加上 @Override 注解。例如:

    @Override
    public void methodName() {
        // 方法体
    }
    

    这里的 methodName() 方法就是在子类中重写父类的方法。

  3. 编译检查: 编译器会检查这个方法是否真的覆盖了父类或接口中的方法。如果父类或接口中不存在对应的方法(方法签名不一致),编译器会报错。

示例

假设有一个父类 Animal 和它的子类 Dog,其中 Animal 中有一个 makeSound() 方法:

public class Animal {
    public void makeSound() {
        System.out.println("Animal makes a sound");
    }
}

现在,你想在 Dog 类中重写 makeSound() 方法。可以这样做:

public class Dog extends Animal {
    @Override
    public void makeSound() {
        System.out.println("Dog barks");
    }
}

在这个示例中,@Override 注解确保了 Dog 类中的 makeSound() 方法真的是对 Animal 类中的 makeSound() 方法的重写。如果你不小心拼写错误或者方法签名不匹配,编译器会提醒你,帮助你及早发现和修复问题。

总结

@Override 注解在实际开发中是一个非常有用的工具,它帮助开发者遵循重写方法的规范,提高代码的可靠性和可读性。

  • 方法重写的注意事项 ?

    • 私有的方法无法重写

    • 重写的方法与被重写的方法 , 名字 , 参数列表需要保持一致

    • 子类重写父类方法时,子类方法访问权限必须大于或者等于父类方法权限 (暂时了解 :缺省 < protected < public)

      • 一般保持一致即可

举例

2-匿名对象

  • 什么是匿名对象 ?

    • 没有变量接收的对象 , 称作为匿名对象

  • 匿名对象的使用 ?

    • 直接使用匿名对象调用方法

    • 匿名对象作为方法传参

    • 匿名对象作为方法的返回值

调用方法

// 定义一个简单的类
class Person {
    public void introduce() {
        System.out.println("Hello, I'm a person.");
    }
}

// 在主程序中使用匿名对象调用方法
public class Main {
    public static void main(String[] args) {
        // 使用匿名对象调用 introduce() 方法
        new Person().introduce();
    }
}

在上面的例子中,new Person().introduce() 创建了一个 Person 类的匿名对象,并立即调用了其 introduce() 方法。这种方式适合于只需要临时使用某个对象执行一些操作,而不需要在后续的代码中再次引用它。

作为方法参数

// 定义一个类
class Calculation {
    public void add(int a, int b) {
        int sum = a + b;
        System.out.println("Sum: " + sum);
    }
}

// 在主程序中将匿名对象作为参数传递给方法
public class Main {
    public static void main(String[] args) {
        // 将匿名对象作为参数传递给 add 方法
        new Calculation().add(5, 3);
    }
}

这个例子中,new Calculation().add(5, 3) 创建了一个 Calculation 类的匿名对象,并将其作为参数传递给 add 方法。这种方式可以简化代码,避免显式地创建变量来引用对象。

注意事项

  • 匿名对象的生命周期仅限于当前使用的代码块,一旦执行完对它的操作,它就会被释放。
  • 由于匿名对象没有引用变量指向它们,因此无法再次使用或者在其他地方引用。

3-抽象类

抽象类(Abstract Class)是在面向对象编程中的一个重要概念。它本身无法被实例化,主要用于其他类继承(extends)或者实现(implements)。抽象类通常用于表示一类对象的通用特征,它可以包含抽象方法、非抽象方法、构造方法、静态方法等。

主要特点:

  1. 不能被实例化: 抽象类不能被直接实例化为对象。也就是说,不能使用 new 关键字来创建抽象类的实例。

  2. 包含抽象方法: 抽象类中可以包含抽象方法(没有方法体,只有方法签名)。子类必须实现抽象类中的所有抽象方法,除非子类也是抽象类。

  3. 可以包含具体方法: 抽象类可以包含具体的方法实现,这些方法可以直接被子类继承和使用。

  4. 用于继承和多态: 抽象类用于通过继承来共享代码和行为。它可以定义子类的结构和行为,而具体的实现由子类完成,从而实现多态性。

举例

// 定义一个抽象类 Animal
abstract class Animal {
    // 抽象方法,子类必须实现
    public abstract void makeSound();
    
    // 具体方法
    public void eat() {
        System.out.println("Animal is eating");
    }
}

// 继承抽象类 Animal 的子类 Dog
class Dog extends Animal {
    // 实现抽象方法 makeSound
    @Override
    public void makeSound() {
        System.out.println("Dog barks");
    }
}

// 主程序测试
public class Main {
    public static void main(String[] args) {
        // 不能直接实例化抽象类 Animal
        // Animal animal = new Animal();  // 编译错误
        
        // 可以创建 Dog 类的对象
        Dog dog = new Dog();
        dog.makeSound();  // 输出: Dog barks
        dog.eat();  // 输出: Animal is eating
    }
}

在上面的例子中,Animal 是一个抽象类,它包含一个抽象方法 makeSound() 和一个具体方法 eat()Dog 类继承自 Animal 类,并实现了 makeSound() 方法。注意,抽象类 Animal 不能直接实例化,但可以通过其子类 Dog 来创建对象。

  • 33
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值