版权声明:如需转载或引用请声明原文网址 https://blog.csdn.net/u013087359/article/details/81009084
一.包package
1.概述
包类似于文件夹,避免同样类名冲突,方便管理文件。
2.定义包
//格式 : package 包名
//包名一般是域名的倒叙写法
package com.test;
public class MyClass {
}
3.注意事项
- 定义包必须是java文件的可执行代码的第一行
- 一个java文件中只能定义一个包
- 如果没有定义包,则默认无包
4.导入包import
- 使用不同包的类时,需要先导入包
- 可以导入某个包中的指定类,也可以导入某个包中所有类(使用星号*)
- 导入包语句可以出现多次
package com.test;
//在包声明和类声明之间导入包
import java.util.Scanner;
import java.math.*;
public class MyClass {
}
二.权限访问修饰符
修饰符 | 本类 | 同包所有类 | 不同包子类 | 不同包非子类 |
---|---|---|---|---|
public | ✔ | ✔ | ✔ | ✔ |
protected | ✔ | ✔ | ✔ | ✖ |
默认 | ✔ | ✔ | ✖ | ✖ |
private | ✔ | ✖ | ✖ | ✖ |
三.构造方法
1.概述
构造方法是类实例化创建对象时的入口,可用于属性初始化或其他操作。
2.特点
- 方法名与类名一致
- 没有返回值(无void、ruturn)
3.注意事项
- 如果不显式声明构造方法,系统会默认提供一个无参构造方法。
- 一旦显式声明了构造方法(构造方法可以重载),则系统不再提供无参构造方法。如需继续使用无参构造方法必须显式声明无参构造方法。
- 子类构造方法第一句默认调用了父类无参构造方法。
super();
- 构造方法不能被重写,只能在子类使用super调用父类的构造方法
- 如需在构造方法中显式调用另一个构造方法(重载构造方法或父类构造方法),则该调用命令必须是构造方法体的第一行代码(即只能显式调用一个构造方法)。
- 如果在构造方法中调用一次本类的其他构造方法, 则还是先默认执行
super()
;如果在构造方法中调用父类的构造方法,则不再默认执行super();
。
四.static
1.概述
静态是随着类的加载而加载,被类的所有对象(创建对象时才加载)共享。
2.特点
- 静态的只能访问静态的,不能访问非静态的
- 非静态能访问静态和非静态的
3.修饰
- 属性
- 方法
- 类(static只能修饰内部类)
- 代码块
4.调用
- 使用对象名调用
- 使用类名调用
五.方法重载
1.概述
方法重载指的是在同一个类中同方法名不同参数列表。
2.特点
- 必须在同一个类中
- 方法名必须相同
- 参数列表不同
- 参数个数 不同
- 参数类型 顺序 不同(与参数名称无关)
- 与访问修饰符和返回值无关
六.方法重写
1.概述
方法重写指的子类对父类的同名方法进行重写。
2.特点
- 父子类关系
- 方法名必须相同
- 参数列表相同
- 返回值类型相同或其子孙类、
- 访问权限相同或更大
- 抛出的异常相同或其子孙类
3.注意事项
子类无法对父类的静态方法进行重写
- 当父类方法是静态时,子类用非静态方法重写会出现编译错误
- 当父类方法是静态时,子类也用静态方法尝试重写时,编译不报错,但是实际运行中没有达到重写效果(作用跟父类子类两个不同名方法一样,各不影响)
多态是根据具体实现进行绑定(动态绑定);静态方法在编译时就已经绑定类(早期绑定),只属于该类,与具体实现无关,声明了什么类就调用相应类的静态方法(本来静态无需声明,可以直接引用)。所以即使符合了重写规则,但本质上没有重写(早期绑定优先于动态绑定),父子类的两个静态方法在多态中是各不相关的,相当于两个不同的方法。