乐于分享
好东西不私藏

软考软件设计师零基础速学Java面向对象核心知识,一篇读懂大半业务代码

软考软件设计师零基础速学Java面向对象核心知识,一篇读懂大半业务代码

点击上方蓝字关注我们

收录于系列文章《软件设计师备考》第三十篇
类的基础定义与权限修饰符

    在Java 开发中,面向对象思想是整个技术体系的核心基石,类与对象、权限控制、继承、接口、关键字使用等内容,也是日常编码、项目开发里高频用到的知识点。很多初学者在学习过程中,容易混淆接口与抽象类、继承与实现的用法,或是在变量赋值、方法传参时出现疏漏。今天就结合完整的知识点体系,用通俗易懂的校园图书借阅系统案例,由浅入深讲解相关语法规则、使用场景与编码技巧。

    一、类的基础定义与权限修饰符

    类是面向对象的核心载体,相当于现实事物的模板,用来描述一类事物共有的属性和行为。掌握类的书写格式与访问权限,是编码的第一步。

    1类的标准语法结构

[import 导入所需工具包][类修饰符] class 类名 [extends 父类] [implements 接口列表] {    // 成员属性:描述事物特征    // 成员方法:描述事物行为}

    语法释义:

语法标识

详细释义

import 导入所需工具包

Java 自带大量现成的工具类,这些类分门别类存放在不同 包(package)中。如果当前代码要使用外部工具类,就必须用 import 导入对应包,否则编译器无法识别该类。

Java内部自带包(JDK原生,无需额外下载)

示例importjava.util.Scanner;(控制台输入工具)

import java.util.Date;(日期工具)

项目外部第三方包(额外导入依赖)

示例:import com.alibaba.fastjson.JSON;JSON解析工具)

import org.springframework.stereotype.Service;(框架工具包)

[类修饰符]

用于限定类的使用范围和特性,常用三类:

public:公开类,项目中所有位置都能访问,一个 Java 文件中最多只能有一个public类;

示例:publicclass Student{}

abstract:抽象类,不能直接实例化对象,内部可包含无具体实现的抽象方法;

示例:abstractclass Book{ public abstractvoid getInfo(); }

final:最终类,无法被其他类继承;

示例:finalclass Order{}

class

Java 中定义类的固定关键字,后面紧跟自定义的类名,类名规范使用大驼峰写法(首字母大写)。

extends 父类

代表继承,表示当前类复用另一个父类的属性和方法;Java 语法规定,一个类只能直接继承一个父类。

示例:父类class Animal{},子类class Dog extendsAnimal{},Dog子类直接复用Animal父类属性与方法。

implements 接口列表

代表实现接口,表示当前类遵守接口定义的行为规范;一个类可以同时实现多个接口。

示例:实现单个接口:interface A{},class B implementsA{};

实现多个接口:interface A{}、interface C{},class B implements A,C{}。

大括号 {}

类的作用域,大括号内部编写当前类的成员属性(变量)和成员方法(功能)。

    备注:public abstract void getInfo();声明一个抽象的公共方法getInfo,该方法没有返回值,也没有参数。

    2接口的定义规则

    接口是行为的集合,仅用来定义规范,不侧重描述事物属性,语法格式如下:

[修饰符] interface 接口名 [extends 父接口列表]{    // 常量(默认自带 public static final 修饰)    // 抽象方法(Java 8 之前仅包含无方法体的抽象方法,默认 public abstract 修饰)}

    语法释义:

语法标识

详细释义

[修饰符]

限制接口访问权限,接口仅支持两种修饰符:public(全局可访问)、默认包访问权限;

默认包访问权限:接口不写任何权限修饰符,不加public;

规则:只能当前同一个包内的类访问,跨包无法使用;

示例:interface Work{}(无修饰符,默认包权限)

interface

Java定义接口专属关键字,用来制定功能规范、不描述实体属性;

示例:interfaceWork{}

接口名

自定义接口名称,遵循大驼峰命名法,首字母大写;示例:Work、UserDao

extends 父接口列表

接口继承关键字,接口支持多继承,可同时继承多个父接口;

示例:interface A extends B,C{}

{} 大括号

接口作用域,内部存放接口常量、抽象方法,是接口代码范围边界

    3、访问权限修饰符

    用来控制类中属性、方法的访问范围,搭配代码示例、使用位置区分说明:

修饰符

访问范围

通俗理解

示例、可用位置

public

所有类均可访问

对外公开的内容,任何位置都能调用

示例:public String name;

可用位置:类、成员变量、成员方法、接口

protected

本类、同包类、子类可访问

对内开放的内容,自身、同族、继承者可以使用

示例:protected int age;

可用位置:类成员、方法

不能修饰接口、外部类

private

仅当前类内部可访问

私有内容,仅本类内部能直接操作,外部无法访问

示例:private double price;

可用位置:类成员、方法

不能修饰接口、外部类

    总结:

    接口自带规则:接口内常量、抽象方法默认public,手动写其他权限会报错。

    protected、private 只能修饰【类里面的变量、方法】,不能修饰类、不能修饰接口public万能:可以修饰类、接口、变量、方法。

    4、抽象类与接口核心区别

    定义关键字不同:抽象类使用abstract class定义,接口使用interface定义;

    继承 / 实现规则不同:类只能单继承抽象类,但可以多实现接口;接口自身支持多继承其他接口;

    内容构成不同:抽象类可以包含普通属性、普通方法、构造方法和抽象方法;传统接口仅能定义常量与抽象方法。

    5、完整语法示例

    示例 1:基础入门案例(无继承、无接口)

// 1. import java.util.Scanner;// import:导入工具包关键字// java.util:系统工具包路径// Scanner:控制台输入工具类,导入后才能使用键盘录入功能import java.util.Scanner;// 2. public class Student// public:公开修饰符,该类全局可访问// class:定义类关键字// Student:自定义类名(学生类)public class Student {    // 3. 成员属性(私有变量)    // private:私有修饰符,仅本类内部访问    // String stuName:定义字符串类型变量,存储学生姓名    private String stuName;    // int age:定义整型变量,存储学生年龄    private int age;    // 4. 成员方法:赋值方法    // public:公开修饰符,外部可调用该方法    // void:表示该方法**无返回值**,执行完逻辑后不向外返回任何数据    // setInfo:自定义方法名    // (String name, int age):方法形参,调用方法时需要传入对应类型数据    public void setInfo(String name, int age) {        // this:代表当前Student类的实例对象        // this.stuName:类自身的成员变量        // name:方法传入的局部参数        this.stuName = name;        this.age = age;    }    // 5. 成员方法:打印信息方法    public void show() {        // System:Java系统核心类        // out:System类中的标准输出对象        // println():打印方法,作用是在控制台输出内容并自动换行        System.out.println("姓名:" + stuName + ",年龄:" + age);    }}

    示例 2:进阶案例(包含 import、继承 extends、接口 implements)

// 导入java.util.Date工具包// Date:日期类,用于存储、展示时间信息,不导入则无法使用该类import java.util.Date;// 定义接口 BookOperate(图书操作规范)interface BookOperate {    // 抽象方法:无方法体,仅定义规范    // void:无返回值;showInfo:方法名    void showInfo();}// 定义父类 BaseItem(基础条目类)class BaseItem {    // protected:受保护修饰符,子类可以直接访问该属性    protected String id;}// public:公开类// Book:当前类名// extends BaseItem:继承父类 BaseItem,复用父类id属性// implements BookOperate:实现接口 BookOperate,必须重写接口所有抽象方法public class Book extends BaseItem implements BookOperate {    // 私有成员属性:图书名称    private String name;    // 私有成员属性:出版时间(使用导入的Date类)    private Date publishDate;    // 赋值方法:设置图书名称    public void setName(String name) {        // this区分成员变量和局部参数        this.name = name;    }    // 取值方法:获取图书名称    // String:方法返回值类型,代表该方法执行后会返回一个字符串数据    public String getName() {        return this.name;    }    // @Override:重写注解,标识该方法是重写接口/父类的方法    @Override    public void showInfo() {        // 控制台打印图书信息        System.out.println("图书名称:" + name);        System.out.println("出版时间:" + publishDate);    }}

    备注:void:用于方法声明处,表示方法没有返回值。如果方法需要返回数据,就把void替换为对应数据类型(String/int等);

    System.out.println():Java 最常用的输出语句,作用是向控制台打印文本、变量等内容,执行后光标自动换行;如果使用print()则不会换行;

    @Override:注解,用来校验当前方法是否正确重写了父类/ 接口的方法,书写不规范时编译器会直接报错。

this关键字的实用场景

    二、this 关键字的实用场景

    this代表当前实例对象,主要用来解决成员变量与局部变量重名的问题,在构造方法和赋值方法中使用最为频繁。

    1. 赋值方法(setter)中使用

    当方法的参数名和类的成员变量名称一致时,局部变量会覆盖成员变量,此时借助this.变量名指向类自身的属性。

public void setBookName(String bookName){    // 左侧 this.bookName:类的成员变量    // 右侧 bookName:方法传入的局部参数    this.bookName = bookName; }

    如果省略this.,代码会变成参数给自己赋值,类的属性始终无法被修改。

    2. 构造方法中使用

    创建对象时,构造方法常用来初始化属性,遇到同名变量同样需要this区分:

// 构造方法:与类名同名,创建对象时自动执行publicBookInfo(double borrowDays){    this.borrowDays = borrowDays;}
END
作者介绍

多年前端开发实战经验,坚持原创技术分享。擅长前端与 UI 设计融合,熟练运用 AI 提升开发效率,为不同阶段开发者提供可落地的思路与技巧。

仙女都在看
点点点,赞和在看都在这儿!