
点击上方蓝字关注我们

在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:重写注解,标识该方法是重写接口/父类的方法@Overridepublic void showInfo() {// 控制台打印图书信息System.out.println("图书名称:" + name);System.out.println("出版时间:" + publishDate);}}
备注:void:用于方法声明处,表示方法没有返回值。如果方法需要返回数据,就把void替换为对应数据类型(String/int等);
System.out.println():Java 最常用的输出语句,作用是向控制台打印文本、变量等内容,执行后光标自动换行;如果使用print()则不会换行;
@Override:注解,用来校验当前方法是否正确重写了父类/ 接口的方法,书写不规范时编译器会直接报错。
二、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;}


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



夜雨聆风