Eclipse的使用
打开eclipse , 选择对应的工作空间
调整视图
创建工程
- 再Eclipse中 工作空间中可以包含多个 工程/项目 , 一个工程中包含多个Java类
创建Java类, 编写代码
方法的重写 重点
从父类继承过来的方法, 并不一定完全符合子类的业务逻辑 !
有时子类需要改变父类继承过来的方法, 可以通过自身编写相同的方法来完成覆盖父类方法的操作 !
规则:
1. 方法名称, 参数列表 ,返回值类型的声明 必须相同 !
2. 访问的权限, 子类的只能大于或等于父类的权限!
3. 抛出的异常 只能小于或等于父类的异常抛出范围 !
方法的重写(Override)与方法的重载(Overload)的区别: 面试题
在定义上:
重写: 方法名称, 参数列表, 返回值类型必须一致!访问权限只能大于或等于父类的权限,只能小于或等于父类的异常
重载: 方法名称相同, 参数列表的类型或个数不同 , 和返回值类型无关, 和权限无关, 和异常抛出无关 !
在使用的位置:
重写发生在子父类的继承关系中, 是子类重新编写了一个方法, 覆盖调用从父类继承过来的方法
重载发生在一个类中 , 是让类以统一的方式处理不同类型数据的一种手段 !
在多态的概念上:
方法的重载 , 就是一个类中多态的体现 !
方法的重写 , 是子父类的多态的体现 !
包 掌握
包名的规范:
一般再第三层的包中开始写代码:
例如兄弟连:
官网网址为: itxdl.cn
cn.itxdl.xxx
访问权限修饰符 重点
修饰符 当前类 当前包中 子父类中 其他所有类中
private(私有) ✔ ✖ ✖ ✖
不写(默认) ✔ ✔ ✖ ✖
protected(受保护) ✔ ✔ ✔ ✖
public(共有的) ✔ ✔ ✔ ✔
final 熟练掌握
final class : 通过final修饰的类, 为最终类, 无法被继承 ! 表示一个类 无法通过继承再进行任何的扩展 !
final method: 通过final修饰方法 , 表示这个方法是最终的 ,不可以被重写!
final attribute: 通过final修饰的变量 , 变成了常量 ! 不可更改的变量 !
public static final attribute: 全局常量, 在当前项目中, 都可以访问到这个常量的值 !
属性的默认初始化 与 显示初始化 了解
举例:
private int a = 10;
上述代码的执行过程:
1. 在栈内存中 存储一个a 默认值为0 , 我们称其为默认初始化值0
2. 将等号右边的值或者运算结果 赋值给等号坐标, 我们称其为显示初始化 !
多态 重点
一种事物的多种形态 !
父类引用指向子类对象
例如:
Person p = new Student();
基本数据类型的多态: (基本数据类型的自动转换)
short a = 10; int a = 10; long a = 10;
方法的多态:
方法的重载 , 就是一个类中多态的体现 !
方法的重写 , 是子父类的多态的体现 !
返回值的多态
一个方法, 在声明返回值类型时 , 可以声明为父类类型, 而具体返回数据时, 可以返回子类类型数据 !
参数列表的多态
方法的参数列表中 可以声明需要传递一个父类的对象, 而方法调用时, 可以传递的是子类对象 !
多态中, 父类引用可以调用子类的属性和方法吗?
思考: Person p = new Student();
使用上述的p引用, 操作时, 操作的是Person还是Student对象?
1. 只能使用父类中定义过的方法 和 属性 !
2. 如果子类对某个父类的方法进行了重写 , 那么多态中调用的永远都是子类所重写的新的方法 !
静态的方法, 不依赖于对象, 所以跟多态的概念没有关系, 使用某一个类的引用调用静态的属性或方法, 那么一定是调用的这个引用类型的方法!
观察:
Person p = new Student();
Student s = p;
Student s = new Person();
在多态中, 如果类型转换时, 将一个内存空间的对象转换为类型不匹配的对象时, 会出现:
java.lang.ClassCastException(类型转换异常)
概念:
必须发生在父子类之间。
父类转子类需要做强制类型转换(向下造型),子类转父类可以自动完成(向上造型)。
对象的类型转换: 其实是一种还原的行为, 内存中类型必须是该类的类型,才能转换成功.
如何合理的判断一个对象是否可以转换为某个类的引用
使用instanceof关键字, 可以判断对象是否来自指定的类
语法: 对象名 instanceof 类名 , 返回的结果为boolean
true表示来自指定的类型, 可以进行强制转换 , false反之
例如:
Person p = new Student();
if(p instanceof ChengGuan){
System.out.println("它是城管");
}else{
System.out.println("它不是城管");
}