Day08练习

A:简答题

1、继承的好处是什么?
	代码重用性高 
	代码易维护
    多态的前提
2、Java中的类的继承特点是什么以及继承的注意事项?
特点
	java语言中只支持单继承
	支持多层继承(子类->父类->...)
注意事项
	子类不能继承父类的私有属性
	子类不能继承父类的构造方法 可以通过关键字super去访问父类构造方法
3、this和super分别是什么,他们各自的应用场景是什么?
this是本类对象的引用
super是父类对象的引用
应用场景
	访问属性
		this.属性名; 从本类开始查找属性 若找不到则从父类继续查找
		super.属性名; 从父类开始查找属性
	调用方法
    	this.方法名(); 从本类开始查找方法 若找不到则从父类继续查找
    	super.方法名(); 从父类开始查找方法
    调用构造方法
    	this(); 调用本类构造器 必须放在构造器首行
    	super(); 调用父类构造器 必须放在子类构造器首行
    	this和super不能同时在构造器中使用
4、什么是方法重写?需要注意哪些问题?
方法重写是子类与父类的方法一样 将父类的方法覆盖掉
注意事项
	子类最好与父类的方法一样
	父类的私有方法子类不能重写
	子类在方法重写时 权限修饰符不能小于父类的权限修饰符
	子类不能重写父类的静态方法
5、方法重写和重载有什么区别?
发生范围
	重写:父类与子类
	重载:本类
方法名
	重写:一致
	重载:一致
形参列表
	重写:一致
	重载:个数 顺序 类型至少有一个不同
返回类型
	重写:一致或者子类的返回类型是父类的返回类型的子类
	重载:无要求
修饰符
	重写:子类的修饰符不能小于父类的返回类型
	重载:无要求
6、子父类中构造方法的执行有什么特点?为什么要这样?
先执行父类的构造方法再执行子类的构造方法
子类继承父类的成员所以在子类初始化前先初始化父类的数据
7、静态代码块,构造代码块,构造方法的执行顺序是什么以及执行特点?
顺序
	静态代码块 > 构造代码块 > 构造方法
特点
	静态代码块:类中方法外 static修饰 用于给类初始化 加载时就执行 只执行一次
	构造代码块:类中方法外 将多个构造方法相同的代码放在一起 每次调用都执行 在构造方法前执行
	构造方法:初始化对象属性
8、final关键字是什么意思,可以修饰那些成员?被修饰的成员有哪些特点?
final关键字就是一个修饰符
修饰范围	
	final关键字就是修饰类 变量 成员方法
特点
    修饰类:被修饰类不能被继承
    修饰方法:被修饰的方法不能被重写
    修饰变量:被修饰的变量不能被重新赋值,因为这个量其实是一个常量

B:看程序写结果(写出自己的分析理由),程序填空,改错,看程序写结果。

1、请写出程序的运行结果

package org;
public class Test {
    public static void main(String[] args) {
        Zi z = new Zi();
        z.show();
    }
}

class Fu {
    public int num = 10;
    public Fu() {
        System.out.println("fu");
    }
}

class Zi extends Fu {
    public int num = 20;
    public Zi() {
        System.out.println("zi");
    }
    public void show() {
        int num = 30;
        System.out.println(num);
        System.out.println(this.num);
        System.out.println(super.num);
    }
}
/*
fu
zi
30
20
10
*/

2、请写出程序的运行结果

package org;
class Demo {
    public void method(int age) {
        System.out.println("int age");
    }
    public void method(String name) {
        System.out.println("String name");
    }
    public void method(String name, int age) {
        System.out.println(name + "---" + age);
    }
    public static void main(String[] args) {
        Demo d = new Demo();
        d.method("小明");
        d.method(18);
    }
}
/*
String name
int age
*/

3、给出以下代码,请问该程序的运行结果是什么?

package org;
class Demo {
    String s = "Outer";
    public static void main(String[] args) {
        S2 s2 = new S2();
        s2.display();
    }
}

class S1 {
    String s = "S1";
    public void display() {
        System.out.println(s);
    }
}

class S2 extends S1 {
    String s = "S2";
}
/*
S1
*/

4、给出以下代码,请问该程序的运行结果是什么?

package org;
class S1 {
    public static void main(String[] args) {
        new S2();
    }
    public S1() {
        System.out.println("S1");
    }
}

class S2 extends S1 {
    public S2() {
        System.out.println("S2");
    }
}
/*
S1
S2
*/

5、给出以下代码,请问该程序的运行结果是什么?如有问题,请指正。

package org;

class A {
    int x = 0;
    A(int w) {
        x = w;
    }
}

class B extends A {
    int x = 0;
    B(int w) {//系统无法给默认的super 所以需要自己调用父类构造器
        x = w + 1;
    }
}

class Demo {
    public static void main(String[] args) {
        B b = new B(100);
    }
}
/*
在第12行处添加super(w);
*/

6、给出以下代码,请问该程序的运行结果是什么?如有问题,请指正。

package org;

class Demo {
    int max;
    void Demo() {
        max = 100;
        System.out.println(max);
    }
    Demo(int i) {
        max = i;
        System.out.println(max);
    }
    public static void main(String[] args) {
        new Demo();//系统无法识别 需要在Demo类中添加一个无参构造
        new Demo(123);
    }
}
/*
在Demo类中添加 public Demo() {}
123
*/

C:编程题

1、编写java程序,分析如下需求,写出你分析的类有哪些,以及功能。最后写一个测试类,针对每个类的功能进行测试。

动物园里有很多种动物:
比如说,狗,猫等。
狗有姓名和年龄,猫也有姓名和年龄。
狗有跑步的方法,猫也有跑步的方法。而且都仅仅是跑步。
狗有吃饭的方法,猫也有吃饭的方法。只不过,狗吃骨头,猫吃鱼。
请用所学知识,对这个问题进行解决。
父类: 成员变量 成员方法
子类: 重写方法 特有方法
测试类: 普通调用
public class Test {
    public static void main(String[] args) {
        Dog dog = new Dog("大黄", 2);
        System.out.println(dog.getName());
        System.out.println(dog.getAge());
        dog.run();
        dog.eat();
        System.out.println("======");
        Cat cat = new Cat("小黄", 1);
        System.out.println(cat.getName());
        System.out.println(cat.getAge());
        cat.run();
        cat.eat();
    }
}
/*
大黄
2
跑步
狗吃骨头
======
小黄
1
跑步
猫吃鱼
*/

public class Animal {
    private String name;
    private int age;
    public Animal(String name, int age) {
        this.name = name;
        this.age = age;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public void run(){
        System.out.println("跑步");
    }
    public void eat(){
        System.out.println("吃饭");
    }
}

public class Dog extends Animal {
    public Dog(String name, int age) {
        super(name, age);
    }

    public void eat() {
        System.out.println("狗吃骨头");
    }
}

public class Cat extends Animal{
    public Cat(String name, int age) {
        super(name, age);
    }

    public void eat() {
        System.out.println("猫吃鱼");
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是将之前day2练习生成的音乐添加混响效果并进行实时处理和显示的代码: ```matlab clc; clear; close all; % 生成音乐 fs = 44100; t = 0:1/fs:5; f1 = 440; f2 = 880; f3 = 1320; y = sin(2*pi*f1*t) + sin(2*pi*f2*t) + sin(2*pi*f3*t); % 创建音频播放器和图形窗口 sigPlayer = audioplayer(y, fs); myFigure = figure('Name', '实时混响'); waveAxes = subplot(2, 1, 1); axis(waveAxes, [0 numel(y)/fs -3 3]); waveAxes.NextPlot = 'replacechildren'; fftAxes = subplot(2, 1, 2); axis(fftAxes, [0 fs/2 0 100]); fftAxes.NextPlot = 'replacechildren'; % 设置音频播放器的参数 windLength = fs / 10; sigPlayer.TimerPeriod = windLength / fs; sigPlayer.TimerFcn = {@realtimeReverb, waveAxes, fftAxes, y, fs}; % 添加混响效果 reverbObject = reverberator('PreDelay', 0.5, 'WetDryMix', 0.5); % 创建实时波形和频谱图对象 realtimeWavePlot = animatedline(waveAxes); realtimeFFTPlot = bar(fftAxes, [], []); % 播放音乐 play(sigPlayer); function realtimeReverb(plr, ~, axwave, axfft, sigData, fs) persistent reverbObject; persistent ind; persistent indbase; if isempty(reverbObject) reverbObject = reverberator('PreDelay', 0.5, 'WetDryMix', 0.5); end if isempty(indbase) indbase = 1:numel(sigData); end windLength = plr.TimerPeriod * fs; ind = fix((plr.CurrentSample) / windLength) * windLength + indbase; segData = sigData(ind); % 混响处理 reverbAudio = reverb(reverbObject, segData); ydata_fft = fft(reverbAudio); ydata_abs = abs(ydata_fft(1:numel(segData)/2)); % 更新实时波形和频谱图的数据 addpoints(realtimeWavePlot, (1:numel(segData))/fs, segData); set(realtimeFFTPlot, 'ydata', log(ydata_abs)); drawnow; end ``` 这段代码首先生成了一个简单的音乐信号 `y`,然后创建了一个音频播放器对象 `sigPlayer` 和一个图形窗口 `myFigure`。在图形窗口中,创建了两个子图 `waveAxes` 和 `fftAxes`,用于显示实时波形图和频谱图。 接下来,设置音频播放器的参数,包括定时器周期和定时器函数。定时器函数 `realtimeReverb` 用于实时处理音频数据并更新图形。在定时器函数中,使用 `reverberator` 函数创建了混响效果对象 `reverbObject`,并对音频数据进行混响处理。然后,通过 FFT 算法计算音频数据的频谱,并将数据更新到实时波形图和频谱图中。 最后,通过调用 `play` 函数开始播放音乐,并启动定时器以实现实时处理和显示。 请注意,在运行此代码之前,您需要确保已经安装了 Matlab,并具有 `reverberator` 函数和 Day 2 练习生成的音乐信号 `y`。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值