Java笔记
Java笔记
面向对象
1 重载
方法重载:具有多个同名方法称为方法的重载。前提是不同方法之间的参数列表互不相同,例如参数个数、参数顺序、参数类型都可以算做不同的参数列表。返回值不同不能作为重载的依据。
注意:构造方法也可以重载。无参构造方法执行时,类内部没有执行初始化的属性将执行默认初始化。
2 封装
封装:将类的属性设置为private,再设置public方法。外部通过调用public方法获取或修改privae属性。
优势:加强权限控制。
劣势:代码繁琐(可通过插件,自动在编译时加上默认get\set方法,省去人工编写的工作量以及类代码更简洁)。
例子:
1 | |
3 继承
一个类继承另一个类的所有属性及方法称为继承。Java只支持单继承(C++支持多继承),避免了菱形继承。
Animal.java:
1 | |
Cat.java
1 | |
Main.java
1 | |
输出:
1 | |
解释:虽然Cat类未定义speak()方法,但继承了Animal类,所以也继承了Animal的speak()方法。
3.1 重写
子类重写父类方法称为重写。
建议:重写方法加上@Override注解,编译器将自动检查是否重写方法,避免人为的编码错误。
Cat.java
1 | |
输出:
1 | |
解释:由于子类重写了父类方法,调用时将调用子类方法。
3.2 子类方法重载
Cat.java
1 | |
Main.java
1 | |
output:
1 | |
解释:子类方法可以与重写的方法重载,也可以与父类方法重载。
总结:
- 当子类方法名和参数列表与父类方法一致时,子类方法将重写父类方法。
- 子类方法名和父类方法名一致,但参数列表不一致时,子类方法将与父类方法触发重载(无论子类是否重写父类方法)。
4 多态
编译多态:方法重载。
运行多态:类指针指向父类或子类实例。
4.1 指向子类实例
new:
1 | |
方法调用:
1 | |
输出:
1 | |
解释:虽然animal是Animal类,但animal是Cat实例,调用方法时将优先调用子类复写的方法。
调用子类重载的方法:
1 | |
报错:’speak()’ in ‘多态.Animal’ cannot be applied to ‘(java.lang.String)’
解释:虽然animal是cat实例,但是animal对象。调用Cat的重载方法时,在animal中找不到该方法,IDE报错。
总结:对象指向子类实例时,只能调用父类有的方法和属性,优先调用子类重写的方法和属性。
4.2 指向父类实例
new:
1 | |
方法调用:
1 | |
运行报错:Animal cannot be cast to Cat
解释:虽然加上(Cat)强转类型在编码阶段不报错,但在运行时候提示无法强制类型转换。(原因不明)
5 接口
- 接口不能拥有private属性、private抽象方法
- 接口的属性必须在声明时实例化
- 接口抽象方法不能拥有
body(不能在接口实现抽象方法) - 接口可省略
public关键字,即接口的属性和方法只能是public类型 - 接口如要像实例化类一样实例化接口,须得在实例化时带上
'body(即实例化同时实现接口)) - 接口可以像类一样使用多态
集合
IO
多线程
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!