Java对象和类
类的五大成员:属性、方法、构造器、代码块、内部类
1. 定义
1.1 完整的类定义
1 | 类声明 |
1 | [public][abstract | final] class className [extends superclassName] [implements InterfaceNameList]{ |
1.2. 完整的Java源文件
源文件的名称必须与属性为 public 的类的类名完全相同
在一个.java 文件中,package 语句和 public 类最多只能有一个
1 | 指定文件中的类所在的包,0个或1个 |
1 | package packageName; |
2. 常用访问修饰符
Java中有四种常用的访问修饰符
- default(默认,即什么也不写的时候就自动加上):在同一包内可见。可以使用的对象:类、接口、变量、方法。
- private:在同一类中可见。可以使用的对象:变量、方法、内部类。
- public:对所有类可见。可以使用的对象:类、接口、变量、方法。
- protected:对同一包内的类和所有子类可见。可以使用的对象:变量、方法、内部类。
访问权限如下表:
修饰符 | 当前类 | 同一包内 | 子孙类(同一包) | 子孙类(不同包) | 其他包 |
---|---|---|---|---|---|
default | Y | Y | Y | N | N |
private | Y | N | N | N | N |
protected | Y | Y | Y | Y/N | N |
public | Y | Y | Y | Y | Y |
对于 protected :
- 基类的 protected 是包内可见的,并且子类也是可见的
- 若子类和基类不在同一包中,那么在子类中,子类实例可以访问其从基类继承而来的 protected 方法,而不能访问 基类的 对象实例中的 受protected约束的方法
3. 继承
3.1 this 和 super
this 关键字的作用:
- this 调用本类中的属性和方法
- this 调用本类中的其他构造器
1 | public class Father { |
super 关键字的作用:
- super 调用基类中的非私有属性和方法
- super 调用父类中的构造器,在构造函数中使用super时,super只能放在第一句
1 | class Son extends Father { |
注意:虽然 super 和 this 用法相似,但是他们并不是一个概念。this 实际上是对当前对象的引用,而 super 并不是对一个对象的引用,他只是一个指示编译器调用超类方法的特殊关键字。
1 | Father father = this; //right |
3.2 方法重写(override)
注意事项和使用细节:
方法重写也叫方法覆盖,需要满足下列条件
- 子类的方法的参数,方法名称,要和父类方法的参数,方法名称完全一样。
- 子类方法的返回类型和父类方法返回类型一样,或是父类返回类型的子类。比如父类方法返回类型是Object,子类方法返回类型是String。
- 子类方法不能缩小父类方法的访问权限。
4. 多态
4.1 类的多态
- 一个对象的编译类型可以和运行类型不一致。
- 编译类型在创建时就确定了,不能改变。
- 运行类型可以变化。
- =左边是编译类型,=右边是运行类型。
可以用二元运算符 instanceof 判断运行类型。
4.2 动态绑定
Java 具有动态绑定机制
- 当调用对象方法的时候,该方法会和该对象的内存地址/运行类型绑定
- 当调用对象属性的时候,没有动态绑定机制,哪里声明就在哪里使用
即:方法有动态绑定机制,属性没有动态绑定机制
5. 抽象类
抽象类使用 abstract 关键词修饰,它的基本功能依旧存在,成员变量、成员方法和构造方法的访问方式和普通类一样。抽象类不能实例化对象,必须被继承才能被使用。包含抽象方法的类就是抽象类。
书写格式:
1 | //抽象类格式 |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 葡萄的个人博客!
评论
GitalkWaline