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

相关推荐
你怎么知道我是队长1 分钟前
C语言---枚举变量
c语言·开发语言
李慕婉学姐5 分钟前
【开题答辩过程】以《基于JAVA的校园即时配送系统的设计与实现》为例,不知道这个选题怎么做的,不知道这个选题怎么开题答辩的可以进来看看
java·开发语言·数据库
fpcc1 小时前
C++编程实践——链式调用的实践
c++
奋进的芋圆2 小时前
Java 延时任务实现方案详解(适用于 Spring Boot 3)
java·spring boot·redis·rabbitmq
sxlishaobin2 小时前
设计模式之桥接模式
java·设计模式·桥接模式
model20052 小时前
alibaba linux3 系统盘网站迁移数据盘
java·服务器·前端
荒诞硬汉2 小时前
JavaBean相关补充
java·开发语言
提笔忘字的帝国3 小时前
【教程】macOS 如何完全卸载 Java 开发环境
java·开发语言·macos
2501_941882483 小时前
从灰度发布到流量切分的互联网工程语法控制与多语言实现实践思路随笔分享
java·开发语言
bkspiderx3 小时前
C++中的volatile:从原理到实践的全面解析
开发语言·c++·volatile