《从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 中的权限修饰符有private、public、protected。

private

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

public

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

protected

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

总结

三种方法都有其对应的使用场景。public和protected修饰的类可以被子类访问,但是子类和父类不在同一个包中就需要通过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[]形参在之前也提到过,这里就不进行过多的赘述。

相关推荐
漂流瓶jz35 分钟前
UVA-11491 奖品的价值 题解答案代码 算法竞赛入门经典第二版
c++·算法·图论·题解·aoapc·算法竞赛入门经典·uva
Moshow郑锴2 小时前
sql-pipeline - 基于PostgreSQL的SQL健康检查与发布编排平台
java·sql
weixin_307779135 小时前
C++代码实现MATLAB中的dlarray函数功能
开发语言·c++·算法·matlab
Frank_refuel8 小时前
C++11之一场名为“搬家”的 C++ 之旅
开发语言·c++
Wang's Blog9 小时前
Java 项目实战: 外卖平台优化-Nginx配置文件结构与块层级
java·开发语言·nginx
hetao173383710 小时前
2026-10-03~04 hetao1733837 的刷题记录
c++·算法
\光辉岁月/10 小时前
5.java-数组
java·开发语言
谢亮_vipxieliang11 小时前
Spring 事务失效的常见场景
java·开发语言·数据库·spring boot
longlongzihan11 小时前
从LeetCode 70. 爬楼梯看动态规划:如何精准推导状态转移方程?
c++·算法·leetcode·动态规划
郑州光合科技余经理11 小时前
海外版外卖加盟:总站与分站配送规则怎么分开管
java·开发语言·前端·后端·uni-app·php·ai编程