头歌平台Java实验:Java面向对象高级

本文介绍了Java面向对象编程的高级概念,包括类的继承与super关键字的使用、final关键字的应用、抽象类与接口、多态、匿名内部类、Lambda表达式以及异常处理的基本实践。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

头歌平台Java实验:Java面向对象高级

以下是个人的答案,欢迎指错以及交流

第一关:类的继承和super

本关任务:认识java继承,了解super关键字的用法及父类方法的重写

1.编写Dog类继承Animal类,并在构造方法中调用父类构造方法

2.重写父类shout方法,方法体为打印输出:String.format("%s发出汪汪叫", this.name)

3.添加public void superShout()方法,方法体为:调用父类shout方法

package step1;

class Animal{

    String name;
    public void shout(){
        System.out.println(this.name + "发出叫声");
    }

    public Animal(String name) {
        this.name = name;
    }
}

// ---------------------Begin------------------------
//编写Dog类继承Animal类,重写shout方法,增加superShout方法
class Dog extends Animal{
    public Dog(String name){
        super(name);
    }
    public void shout(){
        System.out.println(String.format("%s发出汪汪叫", this.name));
    }
    public void superShout(){
        super.shout();
    }
}


// ---------------------End------------------------

第二关-- final关键字改错

本关任务:final关键字改错,要求如下:

1.Person类能够顺利被继承

2.setName方法能被顺利调用

package step2;

// ---------------------Begin------------------------
class Person{
        int age;
        String name;

    public void sayHello(){
        System.out.println("nice to meet you.");
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public

### Java 中 `final` 关键字的常见错误及解决办法 #### 1. 尝试修改已声明为 `final` 的变量 一旦使用 `final` 关键字定义了一个变量,则不能再改变其引用指向的对象或基本类型的值。 ```java public class FinalVariableExample { private final int number = 10; public void changeNumber() { this.number = 20; // 这里会出现编译错误,因为尝试重新赋值给最终字段number } } ``` 为了修复这个问题,在设计阶段就要确保哪些属性应该设置成不可变,并严格遵循这一原则。如果确实需要更改某个对象的状态,考虑不将其标记为 `final` 或者创建新的实例来代替旧的数据结构[^1]。 #### 2. 抽象类中的 `final` 方法无法被子类覆写 当在一个带有抽象方法 (`abstract`) 的基类中定义了 `final` 类型的方法时,任何试图在派生类内对该特定成员函数进行重写的操作都会失败并抛出异常。 ```java public abstract class AbstractClassWithFinalMethod { public final void doSomethingImportant() {} } class ConcreteSubclass extends AbstractClassWithFinalMethod { @Override public void doSomethingImportant() {} // 此处会产生编译期错误, 因为doSomethingImportant已被声明为final. } ``` 解决方案是在不需要防止进一步定制的情况下移除 `final` 限定符;反之亦然——如果你希望阻止其他开发人员覆盖某些行为,请保留它[^2]。 #### 3. 使用 `final` 参数却改变了参数所指代的内容 即使形参本身是常量(即通过 `final` 定义),但这并不意味着传入的实际参数也不能发生变化。对于复合数据类型而言尤其如此,比如数组、集合等容器类。 ```java public static void modifyList(final List<String> list) { list.add("new element"); // 合法的操作,尽管list是一个final参数。 } ``` 要避免这种情况的发生,可以在接收外部输入之前先复制一份副本用于内部处理流程: ```java private static void safeModifyCollection(Collection<?> original) { Collection<Object> copyOfOriginal = new ArrayList<>(original); // 对copyOfOriginal做各种变换... } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

静琳同学在学习

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值