Java基础之面向对象——访问控制权限、封装、继承、重写、抽象类
访问控制权限
Java中引入了访问权限控制(可见性),可以为成员变量、成员方法、静态变量、静态方法甚至是类指定访问权限,不同的访问权限,有着不同程度的访问限制:

封装
封装,把对象的属性和方法结合成一个独立的整体,隐藏实现细节,并提供对外访问的接口。封装的目的是为了保证变量的安全性,使用者不必在意具体实现细节,而只是通过外部接口即可访问类的成员,如果不进行封装,类中的实例变量可以直接查看和修改,可能给整个代码带来不好的影响,因此在编写类时一般将成员变量私有化,外部类需要使用Getter和Setter方法来查看和设置变量。例如一个Person类

也只能通过get方法去访问变量的值,看一下运行结果

也就是说,外部现在只能通过调用定义的方法来获取成员属性,而也可以在这个方法中进行一些额外的操作,比如小明可以修改名字,但是名字中不能包含"小"这个字:

查看一下运行结果

除了成员变量和普通方法之外,也可以将构造方法设置为私有的,这是需要通过内部方式去创建对象,例如

继承
可以创建一个子类,只要让该子类使用extends关键字继承父类即可。

同样的,在父类中定义的方法同样会被子类继承,例如


不过值得注意的是,

使用instanceof关键字可以判断某个变量所引用的对象到底是什么类,
此外,子类和父类是可以定义同名属性的,不过这时要调用父类的属性需要用super关键字,例如同样是对于Student类,

顶层Object类
实际上所有类都默认继承自Object类,除非手动指定继承的类型,但是依然改变不了最顶层的父类是Object类。所有类都包含Object类中的方法,可以尝试使用一下Object的方法,比如

以Student类为例



方法的重写
看一下运行结果

同理,也可以重写toString方法

看一下运行结果

假如父类有一个默认类型的text方法(空方法),那么子类可以重写该方法,类型为public(注意:子类重写父类的方法,重写方法的访问权限不能低于父类方法的访问权限)。例如,

注意,静态方法不支持重写,因为它是属于类本身的,但是它可以被继承。
不同的子类对于同一个方法会产生不同的效果,这就是面向对象编程中多态特性的一种体现。比如:可以新建一个Worker类,继承于Person类,且重写test方法。如果不同的子类对象调用test方法,会产生不同的效果


,例如父类有一个test方法,如下







浙公网安备 33010602011771号