java基础郎波版chapter5习题

文章目录

0.1类的格式

java 复制代码
[修饰符] class 类名 [extends 父类名] [implements 接口列表] {
    // 类体,包括成员变量和方法
}

各部分解释如下:

修饰符(Modifier):

可选的访问修饰符,如 public、private、protected 或者默认(包访问权限)。

如果是公共类,通常会使用 public 修饰符,使得类可以在任何地方被访问。

abstract 修饰符表示类是抽象的,不能被实例化,但可以被其他类继承。

final 修饰符表示类不能被继承。

static 修饰符(不用于类声明,但可以用于定义静态嵌套类)。

类名(ClassName):

遵循驼峰命名法,首字母大写,如 MyClassName。

extends 父类名:

可选的,如果类继承自另一个类,则在此处指定父类的名称。

Java 不支持多重继承,即一个类只能继承一个父类。

implements 接口列表:

可选的,如果类实现了一个或多个接口,列出接口名,用逗号分隔,如 implements MyInterface1, MyInterface2。

一个类可以实现多个接口,以实现多态性。

类体(Class Body):

包含在大括号 {} 内,声明类的成员变量和方法。

1.举例说明类方法与实例方法以及类变量与实例变量之间的区别。

类方法是不需要声明实例就可以直接直接用类调用的,是类级别的方法,用static来声明,而实例方法是对象级别的,需要声明对象来调用方法。类变量是所有实例所共享的,属于类层面的,都有,而且一经改变就影响所有实例。对象变量是对象层面的,只影响特定对象。

java 复制代码
public class Animal {
    // 类变量 (静态变量)
    public static String species = "Mammal"; // 所有Animal实例共享的种类信息

    // 实例变量
    private String name; // 每个Animal实例都有自己的名字

    // 构造方法
    public Animal(String name) {
        this.name = name; // 初始化实例变量
    }

    // 实例方法
    public void speak() {
        System.out.println(name + " says Woof!");
    }

    // 类方法 (静态方法)
    public static void changeSpecies(String newSpecies) {
        species = newSpecies; // 修改类变量,影响所有Animal实例
    }
}

public class Main {
    public static void main(String[] args) {
        // 创建Animal实例
        Animal dog = new Animal("Dog");
        Animal cat = new Animal("Cat");

        // 实例方法调用
        dog.speak(); // 输出: Dog says Woof!
        
        // 类方法调用
        Animal.changeSpecies("Reptile"); // 改变类变量的值
        
        // 查看类变量和实例变量的变化
        System.out.println(dog.species); // 输出: Reptile
        System.out.println(cat.species); // 输出: Reptile
        System.out.println(Animal.species); // 输出: Reptile
        
        // 注意:类变量的改变影响了所有实例
    }
}

0.2接口声明的格式

java 复制代码
[修饰符] interface 接口名 [extends 其他接口列表] {
    // 常量声明
    public static final 数据类型 常量名 = 常量值;

    // 抽象方法声明
    public  返回类型 方法名(参数列表);

    // 默认方法声明(Java 8起)
    public default 返回类型 方法名(参数列表) {
        // 默认方法的实现
    }

    // 静态方法声明(Java 8起)
    public static 返回类型 方法名(参数列表) {
        // 静态方法的实现
    }
}

例如

java 复制代码
public interface MyInterface {
    // 常量声明
    public static final int CONSTANT_VALUE = 100;

    // 抽象方法声明
    void doSomething();

    // 默认方法声明
    default String getDefaultMessage() {
        return "This is a default method.";
    }

    // 静态方法声明
    static void staticMethod() {
        System.out.println("This is a static method in the interface.");
    }
}

接口中的变量实际上应该声明为 static final,这是Java语言规范的要求。在接口中声明的变量自动具有 public static final 的修饰符 ,因此通常可以省略这些关键字。但是,为了清晰和易读,有些人会选择显式写出这些修饰符。下面是修正后的接口声明:

2.什么是接口?接口的意义是什么?

接口(Interface):

定义:接口在面向对象编程中是一种契约,它定义了一组方法的签名,但不提供具体的实现 。接口是用来规定实现接口的类必须提供 哪些方法,但不规定如何实现这些方法。

意义:接口的主要目的是实现多态性和解耦合。它允许不同的类实现相同的接口,从而确保这些类具有共同的行为,即使它们之间没有继承关系。通过接口,开发者可以设计更加灵活和可扩展的系统。

3.什么是包?如何定义包?

包(Package):

定义:包是Java中用于组织类和接口的一种命名空间 ,它帮助管理类的命名冲突,提供了一种模块化的机制,使得类和接口可以被分类和分组。

定义包:在Java中,使用package关键字来定义包,通常放在源代码文件的顶部。例如,定义名为com.example.myapp的包:

4.什么是抽象类?抽象类与接口有何区别?

抽象类(Abstract Class):

定义:抽象类是不能被实例化的类 ,它可能包含抽象方法(没有实现的方法)和非抽象方法(有实现的方法)。抽象类用于提供一个基类,供其他类继承,并可以提供部分默认实现。

与接口的区别:

方法的实现:抽象类可以包含方法的实现,而接口只能声明方法,不能包含实现

多重继承:Java中,一个类只能继承一个抽象类,但可以实现多个接口

成员变量:抽象类可以有实例变量 ,而接口不能有实例变量 (除了static final常量)。

访问修饰符:接口的方法默认是public,而抽象类的方法可以有不同的访问级别。

目的:抽象类通常用于表示具有共同特性的类 的模板,而接口主要关注行为的一致性,定义类必须遵循的规范。

5.下列接口的定义中,哪个是正确的?

(1)interface Printable{

void print(){ };

}

(2)abstract interface Printable{

void print();

}

(3)abstract interface Printable extends Interfacel, Interface2{

void print(){};

}

(4)interface Printable{

void print();

}

第四个正确。

6.在一个图书管理程序中,类Book,Newspaper和 Video 都是类 Media 的子类。编写一个类,该类能够实现对一组书、报纸等的存储,并提供一定的检索功能。

这是定义被调用的类

java 复制代码
package com.example.demo.chapter;

/**
 * @author zyk
 * @date 2024/4/30 上午10:03
 * @return
 */
abstract public class media {

    public String mediaName;
    public void store(String mediaName)
    {
        System.out.println("这是储存模块");
    }
    public void find(String mediaName)
    {
        System.out.println("这是查找模块");
    }

}


class video extends media
{
    @Override
    public void store(String mediaName) {
        super.store(mediaName);
        System.out.println("这是储存到的视频模块");
    }
    @Override
    public void find(String mediaName)
    {
        super.find(mediaName);
        System.out.println("这是检索到的视频模块");
    }
}

下面的测试代码

java 复制代码
package com.example.demo.chapter;

public class mediaTest {
    public static void main(String[] args)
    {
        media media = new video();
        media.store("media");
        media.find("media");
    }   
}

7.利用枚举类型重新编写例5-13。

相关推荐
陈大爷(有低保)6 分钟前
UDP Socket聊天室(Java)
java·网络协议·udp
c4fx12 分钟前
Delphi5利用DLL实现窗体的重用
开发语言·delphi·dll
kinlon.liu20 分钟前
零信任安全架构--持续验证
java·安全·安全架构·mfa·持续验证
鸽芷咕36 分钟前
【Python报错已解决】ModuleNotFoundError: No module named ‘paddle‘
开发语言·python·机器学习·bug·paddle
王哲晓41 分钟前
Linux通过yum安装Docker
java·linux·docker
Jhxbdks1 小时前
C语言中的一些小知识(二)
c语言·开发语言·笔记
java6666688881 小时前
如何在Java中实现高效的对象映射:Dozer与MapStruct的比较与优化
java·开发语言
Violet永存1 小时前
源码分析:LinkedList
java·开发语言
执键行天涯1 小时前
【经验帖】JAVA中同方法,两次调用Mybatis,一次更新,一次查询,同一事务,第一次修改对第二次的可见性如何
java·数据库·mybatis
代码雕刻家1 小时前
数据结构-3.1.栈的基本概念
c语言·开发语言·数据结构