Java基础之面向对象——访问控制权限、封装、继承、重写、抽象类
访问控制权限
Java中引入了访问权限控制(可见性),可以为成员变量、成员方法、静态变量、静态方法甚至是类指定访问权限,不同的访问权限,有着不同程度的访问限制:
封装
封装,把对象的属性和方法结合成一个独立的整体,隐藏实现细节,并提供对外访问的接口。封装的目的是为了保证变量的安全性,使用者不必在意具体实现细节,而只是通过外部接口即可访问类的成员,如果不进行封装,类中的实例变量可以直接查看和修改,可能给整个代码带来不好的影响,因此在编写类时一般将成员变量私有化,外部类需要使用Getter和Setter方法来查看和设置变量。例如一个Person类
也只能通过get方法去访问变量的值,看一下运行结果
也就是说,外部现在只能通过调用定义的方法来获取成员属性,而也可以在这个方法中进行一些额外的操作,比如小明可以修改名字,但是名字中不能包含"小"这个字:
查看一下运行结果
除了成员变量和普通方法之外,也可以将构造方法设置为私有的,这是需要通过内部方式去创建对象,例如
继承
可以创建一个子类,只要让该子类使用extends关键字继承父类即可。
同样的,在父类中定义的方法同样会被子类继承,例如
不过值得注意的是,
使用instanceof关键字可以判断某个变量所引用的对象到底是什么类,
此外,子类和父类是可以定义同名属性的,不过这时要调用父类的属性需要用super关键字,例如同样是对于Student类,
顶层Object类
实际上所有类都默认继承自Object类,除非手动指定继承的类型,但是依然改变不了最顶层的父类是Object类。所有类都包含Object类中的方法,可以尝试使用一下Object的方法,比如
以Student类为例
方法的重写
看一下运行结果
同理,也可以重写toString方法
看一下运行结果
假如父类有一个默认类型的text方法(空方法),那么子类可以重写该方法,类型为public(注意:子类重写父类的方法,重写方法的访问权限不能低于父类方法的访问权限)。例如,
注意,静态方法不支持重写,因为它是属于类本身的,但是它可以被继承。
不同的子类对于同一个方法会产生不同的效果,这就是面向对象编程中多态特性的一种体现。比如:可以新建一个Worker类,继承于Person类,且重写test方法。如果不同的子类对象调用test方法,会产生不同的效果
,例如父类有一个test方法,如下
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)