java基础郎波版chapter5习题

本文详细介绍了Java中的类、方法、变量、包、抽象类和接口的概念,通过实例展示了它们的区别和用法,以及如何在图书管理程序中使用这些概念。
摘要由CSDN通过智能技术生成

0.1类的格式

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

各部分解释如下:

修饰符(Modifier):

可选的访问修饰符,如 public、private、protected 或者默认(包访问权限)。
如果是公共类,通常会使用 public 修饰符,使得类可以在任何地方被访问。
abstract 修饰符表示类是抽象的,不能被实例化,但可以被其他类继承。
final 修饰符表示类不能被继承。
static 修饰符(不用于类声明,但可以用于定义静态嵌套类)。

类名(ClassName):

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

extends 父类名:

可选的,如果类继承自另一个类,则在此处指定父类的名称。
Java 不支持多重继承,即一个类只能继承一个父类。

implements 接口列表:

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

类体(Class Body):

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

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

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

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接口声明的格式

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

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

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

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

例如

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 的子类。编写一个类,该类能够实现对一组书、报纸等的存储,并提供一定的检索功能。

这是定义被调用的类

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("这是检索到的视频模块");
    }
}

下面的测试代码

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。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值