《从C/C++到Java入门指南》- 18.面向对象编程基础

18.面向对象基础

前言

写到这里的时候,笔者的《Java从入门到精通》恰好到了,接下来的内容将会以这本书为主要资源进行学习。

成员变量

Java 中对象的属性称为成员变量,范围是整个类。

java 复制代码
public class Book {
	private String name;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
}

这个代码中申明了一个成员变量name,关于这里private等权限修饰符和变量作用域的内容放在后面。

权限修饰符

Java 中的权限修饰符有privatepublicprotected

private

如果一个成员变量被修饰为private,该成员变量只能在本类中被访问,在子类中不可见,并且在其他类中也是不可见的。设置为private之后,这个类将隐藏它内部的所有数据,防止用户直接进行访问。

public

如果设置为public,则表示公开该成员变量,所有地方皆可访问。

protected

设置为protected,只有本包内的该类的子类和其他类可以访问该类的成员变量和成员方法。

总结

三种方法都有其对应的使用场景。publicprotected修饰的类可以被子类访问,但是子类和父类不在同一个包中就需要通过public进行访问。如果父类不允许继承的子类访问成员变量,就需要使用private来进行限制。

再进行概括一下就是,所有修饰符对于本类皆可见。区别在于同包下的其他类或者其他包。

private protected public
本类 可见 可见 可见
同包其他类或子类 不可见 可见 可见
其他包的类或子类 不可见 不可见 可见

也很好总结,private 就只能在本类中访问,protected 不能再其他类中进行访问,public较为博爱皆可访问。

当申明类时不适用修饰符,默认为包存取范围,只有这个包内可以访问成员变量或成员方法。

this 关键字

我们知道,类就是蓝图,可以批量生产出不同编号的类。this关键字所指的就是当前这个编号的对象,而不是其他对象。

可以使用this方法返回类本身,原因是该方法就是类自身的引用。

静态变量和静态方法

static修饰的变量或方法称为静态变量和静态方法。

有时在多个类中会需要在同一个内存共享一个数据,比如圆类中,PI 在所有类中的值都是一样的,那就没有必要在每一个圆类中都分配一个空间来存放PI ,直接在同一个内存中进行存放即可。为了解决这个问题,可以将PI设置为静态变量。

被声明为static的变量和方法叫做静态成员。静态成员归属于类所有,而不是任何一个对象。

java 复制代码
import java.util.*;
public class Main {
	public static String name;
    public static void main(String[] args) {
    	System.out.println(Main.name);
    	System.out.println(getName());
    	setName("Jack");
    	printName();
    }
    public static String getName() {
    	return name;
    }
    public static void setName(String name) {
    	Main.name = name;
    }
    public static void printName() {
    	System.out.print(name);
    }
}

上述创建了一个static变量,为静态的变量进行了一些基本的操作。

类的构造方法

java 复制代码
import java.util.*;
public class Main {
	public static String name;
    public static void main(String[] args) {
    	System.out.println(Main.name);
    	System.out.println(getName());
    	setName("Jack");
    	printName();
    }
    public static String getName() {
    	return name;
    }
    public static void setName(String name) {
    	Main.name = name;
    }
    public static void printName() {
    	System.out.print(name);
    }
}

输出结果:

复制代码
HarryPotter
又多了一本书.
HelloBook!
又多了一本书.
现在有2本书!

上述代码利用了类的构造,在创建类的时候为其指定一个名字。并应用了类的静态变量,所有书维护一个统一的数量。静态方法可以打印这个类的变量。

java 复制代码
public class Example {
	static {
		...
	}
}

可以用static定义一个静态区域,当类文件被执行时,会首先执行static块中的程序,并且只会执行一次。

需要注意的是,在static 静态代码块内部,避免使用动态的方法,也就是非静态方法,否则会报错。

java 复制代码
public class Book {
	public static int count;
	public String name;
	static {
		System.out.println("static 静态代码块内的代码会优先执行!");
		System.out.println(count);
		// System.out.println(name);
	}
	public static void main(String args[]) {
		System.out.println("主方法后调用!");
	}
}

name是一个非静态的变量,会随着生成的对象而变化,不是类进行统一维护的,如果进行调用会导致报错。但是 count是一个静态的变量,可以进行访问。

类的主方法

类的主方法是类的入口点,并且args[]形参在之前也提到过,这里就不进行过多的赘述。

相关推荐
咩咩啃树皮8 小时前
第40篇:Vue3组件化开发精讲——组件拆分、复用、父子通信、工程化架构
java·前端·架构
炸膛坦客8 小时前
单片机/C/C++八股:(二十六)IIC 专题(I²C)---- 上集
c语言·c++·单片机
旖-旎8 小时前
LeetCode 518:零钱兑换||(完全背包)—— 题解
c++·算法·leetcode·动态规划·背包问题
鱟鲥鳚8 小时前
Spring Boot 集成 LangChain4j:从模型调用到 Tool Calling(Demo版)
java·spring boot
Henry Zhu1238 小时前
C++中的特殊成员函数与智能指针
c++
大模型码小白9 小时前
【Python零基础教程】继承、多态与魔法函数:面向对象编程三大核心特性详解
java·大数据·开发语言·人工智能·python·ai编程
腾渊信息科技公司10 小时前
Spring Boot对接MES实战:视觉检测数据自动同步方案
java·人工智能·spring boot·后端·计算机视觉·ai·软件需求
_wyt00111 小时前
多重背包问题详解
c++·背包dp
爱笑的源码基地11 小时前
高并发 Redis 缓存门诊HIS系统源码,含财务统计药房进销存
java·程序·门诊系统·诊所系统·云诊所源码
wuqingshun31415911 小时前
TCP超时重传机制是为了解决什么问题?
java