访问权限
TODO 面向对象 - 访问权限
public : 公共的,访问权限修饰符
Java的源码中,公共类只能有一个,而且必须和源码文件名相同
main方法:main方法是由JVM调用的,JVM调用时应该可以任意调用,而不用考虑权限问题。
TODO Java中的访问权限主要分为4种:
1. private : 私有的, 同一个类中可以使用
2. (default) : 默认权限, 当不设定任何权限时,JVM会默认提供权限,包(路径)权限
3. protected : 受保护的权限, 子类可以访问
4. public : 公共的, 任意使用
private : 同类
default : 同类,同包(路径)
protected :同类,同包(路径),子类
public :公共的
所谓的访问权限,其实就是访问属性,方法的权力和限制。
谁访问?Java17_Object_Access_1 -> super -> java.lang.Object
访问谁的?Person17 -> super -> java.lang.Object(clone)
成员方法可以访问静态属性,静态方法不可以访问成员属性。
单例模式
TODO 面向对象 - 单例模式
JVM默认给类提供的构造方法,其实就是公共的,无参的构造方法
1. 类的创建过程复杂
2. 类的对象消耗资源
final
Java中提供了一种语法,可以在数据初始化后不被修改,使用关键字final
1. final可以修饰变量:变量的值一旦初始化后无法修改
2. final可以修饰属性:那么JVM无法自动进行初始化,需要自己进行初始化, 属性值不能发生变化
3. 一般将final修饰的变量称之为常量,或者叫不可变变量
4. final可以修饰方法,这个方法不能被子类重写
5. final可以修饰类,这样类就没有子类了
6. final不可以修饰构造方法
7. final可以修改方法的参数,一旦修饰,参数就无法修改。
abstract
TODO 面向对象 - 抽象 - Abstract
抽象类 : 不完整的类,就是抽象类
abstract class 类名
因为类不完整,所以无法直接构造对象
抽象方法 : 只有声明,没有实现的方法
abstract 返回值类型 方法名(参数)
分析问题:对象(具体) => 类(抽象)
编写代码:类(抽象) => 对象(具体)
如果一个类中含有抽象方法,那么这个类是抽象类
如果一个类是抽象类,它的方法不一定是抽象方法。
抽象类无法直接构建对象,但是可以通过子类间接构建对象
如果抽象类中含有抽象方法,那么子类继承抽象类,需要重写抽象方法,将方法补充完整,
abstract关键字不能和final同时使用
接口
TODO 面向对象 - 接口
所谓的接口,可以简单理解为规则
基本语法 : interface 接口名称 { 规则属性,规则的行为 }
接口其实是抽象的
规则的属性必须为固定值,而且不能修改。
属性和行为的访问权限必须为公共的。
属性应该是静态的
行为应该是抽象的
接口和类是两个层面的东西
接口可以继承其他接口
类的对象需要遵循接口,在java中,这个遵循,称之为实现(implements),类需要实现接口,而且可以实现多个接口
枚举
TODO 面向对象 - 枚举
枚举是一个特殊的类,其中包含了一组特定的对象,这些对象不会发生改变, 一般都使用大写的标识符,
枚举使用enum关键字使用
枚举类会将对象放置在最前面,那么和后面的语法需要使用分号隔开
枚举类不能创建对象,它的对象是在内部自行创建
匿名
TODO 面向对象
在模型场合下,类的名字不重要,我们指向使用类中的方法或功能。那么此时我们可以采用特殊的语法:匿名类
所谓的匿名类,就是没有名字的类
bean规范
TODO 面向对象
1. 主要用于编写逻辑
2. 主要用于建立数据模型(Bean)
TODO Bean类得设计规范:Bean规范
1. 类要求必须含有无参,公共的构造方法
2. 属性必须私有化,然后提供公共得,set,get方法
class User25 {
private String account;
private String password;
public void setAccount( String account ) {
this.account = account;
}
public void setPassword(String password) {
this.password = password;
}
public String getAccount() {
return account;
}
public String getPassword() {
return account;
}
}
作用域
TODO 面向对象 - 作用域
如果属性和(局部)变量的名称相同,访问时如果不加修饰符,那么优先访问变量