JavaSE 基础知识

本文深入浅出地讲解了Java SE中的核心概念,包括类和对象、访问控制与修饰符,重点阐述了封装、继承和多态的原理、示例以及关键知识点,如方法覆盖与重载、接口的声明与实现。适合Java初学者和进阶者学习。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


前言

本文将对Java的三大特性:封装、继承、多态进行简单的说明,涉及abstract、final、static、implements、extends……等关键字,主要对父类和子类的继承、方法的重载和重写进行详细的叙述。
Tips:小白一枚,分享一些学习心得,请大佬们指正!

(一)对象和类

1.类的声明

[访问控制符] [修饰符] class 类名 [extends 父类] [implements 接口]{}

extends关键字的意思是继承,使用该关键字可以让该类继承另外一个类(只能一个)
implement关键字的意思是实现接口,使用该关键字可以实现一个或多个接口

1.1访问控制符

关键字含义
public所修饰的类是公共的,任何类都可以访问
private所修饰的类是私有的,自能被该类自身访问
protected所修饰的类可以被该类本身和同一包下的其他类或不同包下的子类访问
friendly(默认)所修饰的类只能被自身和同一包下的类访问

1.2修饰符

关键字含义
static声明该类是静态类
abstract声明该类是抽象类,抽象类中至少有一个方法是抽象的,被abstract关键字声明的类不能被实例化,即不能生成对象
final声明该类为最终类,不能被继承

2.变量的声明

[访问控制符] [修饰符] 变量类型 方法名称 变量名称

2.1访问控制符

关键字含义
public所修饰的成员变量是公共的,任何类都可以访问
private所修饰的成员变量是私有的,自能被该类自身访问
protected所修饰的成员变量可以被该类本身和同一包下的其他类或不同包下的子类访问
friendly(默认)所修饰的成员变量是友好型的,只能被自身和同一包下的类访问

2.2修饰符

关键字含义
static所修饰的变量称为静态变量,可以被该类所有对象共享
final所声明的变量的值不能再被修改

一般用static和final共同定义一个常量,名称所有字母都大写,以便与变量区分。

private static final int MAX = 50;

3.方法的声明

[访问控制符] [修饰符] 方法返回值类型 方法名称 ([参数类型 参数列表]) [throws 异常]

3.1访问控制符

关键字含义
public所修饰的方法是公共的,任何类都可以访问
private所修饰的方法是私有的,自能被该类自身访问
protected所修饰的方法可以被该类本身和同一包下的其他类或不同包下的子类访问
friendly(默认)所修饰的方法是友好型的,只能被自身和同一包下的类访问

3.2修饰符

关键字含义
static声明的方法为静态方法,可以被该类所有对象所共享(不用创建对象即可调用)
abstract声明的方法是抽象方法,抽象方法只有声明,没有方法体
final声明的方法不能被重写或覆盖

(二)三大特性

1.封装

封装就是把对象的属性和服务结合成一个独立相同的单位,并尽可能隐蔽对象的内部细节。
封装的两层含义:
(1)把对象的所有属性和方法都打包在一起,形成一个独立相同的单位(对象)。对象的私有属性只能由对象的行为来读和写。
(2)尽可能隐蔽对象的内部细节,通过外部接口与外界实现进行联系。
封装的优点:高内聚,低耦合,减少依赖。
代码示例:
(1)Person 类封装 name、gender、age 等属性,外部只能通过 get() 方法获取一个 Person 对象的 name 属性和 gender 属性,而无法获取 age 属性,但是 work() 方法可以使用age属性。
(2)其次,sex属性的类型是int型的,通过0和非0对性别进行判断,这也是隐藏内部细节的一种体现。

public class Person{
    private String name;
    private int sex;
    private int age = 18;

    public String getName() {
        return name;
    }

    public String getSex() {
        if (sex == 0){
            return "man";
        }else{
            return "woman";
        }
    }

    public void work(){
        if(age < 60){
            System.out.println(age + "岁还能继续干!");
        }else if(age >= 60){
            System.out.println(age + "岁该退休了");
        }
    }

    public static void main(String[] args) {
        Person person = new Person();
        person.work();
    }

}

2.继承

继承可以简单的理解为一个对象直接使用另一个对象的属性和方法,前者称为子类(继承),后者称为父类(被继承)。在Java中,一个子类只能继承一个父类,但是一个父类却可以被多个父类继承。
子类继承父类需遵循以下原则:
(1)子类不能继承父类的private成员变量/方法,可以继承publicprotected成员变量/方法;
(2)子类能继承同一包中有默认权限修饰符static的成员变量/方法;
(3)子类不能继承父类的构造方法,但可以通过super()进行调用。
代码示例:
父类:Animal动物类

public class Animal {
    public void eat(){
        System.out.println("动物要吃饭!");
    }
}

子类:Cat猫类,通过extends关键字进行继承,可以使用父类直接生成子类对象,生成的子类拥有父类的相关方法和属性。

public class Cat extends Animal{
    public static void main(String[] args) {
        Animal animal = new Cat();  //使用父类直接生成子类对象
        animal.eat();
    }
}

3.多态

多态可以分为静态多态性和动态多态性两种。
静态多态性:即编译时多态,主要指方法的重载。
动态多态性:即运行时多态,主要指方法的覆盖。

3.1方法的覆盖/重写

概念:方法的覆盖(重写)是指子类中的方法与父类中继承的方法有完全相同的返回值类型、方法名、参数个数以及参数类型,但两者方法体(内容)不同。
需注意的是:
(1)不能覆盖父类的final方法。
(2)不能覆盖父类的static方法,但可以进行隐藏。即在子类重写的方法前加上static。
(3)非抽象子类必须覆盖父类(abstract)中的抽象方法。

//父类
public class Animal {
    public void eat(){
        System.out.println("动物要吃饭!");
    }
}

//子类
public class Cat extends Animal{
    public void eat(){
        System.out.println("猫要吃鱼!");
    }
}

3.2方法的重载

方法的重载可以简单的理解为,在同一个类中,返回值类型、方法名相同,但是参数(个数或类型)不同的方法。
代码示例:
方法二对方法一进行重载

//构造方法一
public Person() { 
       System.out.println("我是无参的构造方法!");
   }
   
//构造方法二
public Person(String name, int sex, int age) { 
     this.name = name;
     this.sex = sex;
     this.age = age;
     System.out.println("我是有参的构造方法!");
 }

(三)接口

Java中一个子类只能继承一个父类,即单继承;但允许一个类实现多个接口,以达到多继承的效果。

1.1接口的声明

Tips:
(1)接口中的方法默认是abstract,不管有没有加上修饰符。
(2)接口若为public,那么该接口可被任意类实现,否则只有与接口在同一个包中的类实现。
代码示例:

[访问控制符] <interface> <接口名> {
	静态常量及方法声明
}
//示例
public interface Animal {
	//接口中的方法默认是abstract
	//只有方法声明,没有方法体
    public void eat();
    public void sleep();
}

1.2接口的实现

只需通过implements关键字即可实现接口,多个接口只需用逗号分隔。
Tips:必须实现接口中所有的方法,且实现接口的方法要保证其方法的返回值类型、方法名和方法的参数列表与接口中的完全一致。

public class Pig implements Animal{
    @Override
    public void eat() {
        System.out.println("猪吃玉米!");
    }

    @Override
    public void sleep() {
        System.out.println("猪要睡觉!");
    }
}

参考文献:
苑俊英、陈海山《Java程序设计及应用——增量式项目驱动一体化教程》 [ M ] 北京:电子工业出版社 2021.1

### 关于JavaSE基础知识的学习 #### JavaSE的基础概念 JavaSEJava Standard Edition)是Java平台的标准版,提供了构建和部署跨平台应用程序所需的核心功能。它涵盖了从基本语法到高级特性的广泛主题,适合初学者逐步掌握并应用于实际开发。 #### 推荐学习资源 以下是针对JavaSE基础教程的一些推荐学习材料: 1. **《JavaSE系列教程》** 这是一套由个人精心编写的原创教程,覆盖了JavaSE的全面知识点,并配有大量亲手绘制的插图来辅助理解复杂概念[^1]。此教程不仅包含了理论讲解,还通过丰富的案例帮助读者实践所学内容。特别强调的是,这套教程的内容几乎完全基于作者自身的研究与总结,具有很高的权威性和实用性。 2. **《Java核心技术 卷一、卷二》** 作为经典的Java教材之一,《Java核心技术》详细介绍了Java语言及其生态系统的关键方面,非常适合希望深入了解Java内部机制的学生和技术人员。这本书籍可以作为补充阅读材料,用于深化对某些特定领域如多线程处理、异常管理等方面的认识。 3. **在线学习笔记整理** 另外,“JavaSE基础教程——学习笔记整理”也提供了一个不错的起点,尤其是对于那些希望通过简洁明了的方式快速获取信息的人群来说非常有用[^2]。这些笔记通常会聚焦于具体的功能点或者新特性介绍,比如可变参数、Arrays工具类的方法应用等。 4. **官方文档与其他参考资料** 不应忽视来自Oracle官网发布的Java SE Documentation,这是最准确可靠的信息源。同时还可以参考其他公开可用的技术博客文章或论坛讨论帖,在遇到难题时寻求社区支持往往能事半功倍。 #### 示例代码展示 下面给出一段简单的Java程序示例,演示如何创建一个包含字符串数组的对象,并打印其中每一个元素: ```java public class Main { public static void main(String[] args) { String[] names = {"Alice", "Bob", "Charlie"}; for (String name : names){ System.out.println(name); } } } ``` #### 总结 综上所述,无论是选择系统化的书本学习还是灵活便捷的网络课程,只要坚持下去都能有效提升自己的Java技能水平。重要的是找到适合自己节奏和风格的教学方式,并不断练习巩固学到的知识。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值