《从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[]形参在之前也提到过,这里就不进行过多的赘述。

相关推荐
希忘auto8 分钟前
详解MySQL安装
java·mysql
ChoSeitaku8 分钟前
链表循环及差集相关算法题|判断循环双链表是否对称|两循环单链表合并成循环链表|使双向循环链表有序|单循环链表改双向循环链表|两链表的差集(C)
c语言·算法·链表
娅娅梨10 分钟前
C++ 错题本--not found for architecture x86_64 问题
开发语言·c++
DdddJMs__13514 分钟前
C语言 | Leetcode C语言题解之第557题反转字符串中的单词III
c语言·leetcode·题解
兵哥工控15 分钟前
MFC工控项目实例二十九主对话框调用子对话框设定参数值
c++·mfc
冰淇淋烤布蕾19 分钟前
EasyExcel使用
java·开发语言·excel
我爱工作&工作love我22 分钟前
1435:【例题3】曲线 一本通 代替三分
c++·算法
拾荒的小海螺25 分钟前
JAVA:探索 EasyExcel 的技术指南
java·开发语言
Jakarta EE42 分钟前
正确使用primefaces的process和update
java·primefaces·jakarta ee
马剑威(威哥爱编程)1 小时前
哇喔!20种单例模式的实现与变异总结
java·开发语言·单例模式