1、重载(Overload)
方法重载的规则:
- 同一个类中
- 方法名称必须相同
- 参数列表必须不同(个数不同、类型不同、或参数排列顺序不同)
- 方法的返回类型和访问修饰符可以相同也可以不同
- 仅仅返回类型不同不足以成为方法的重载
2、重写(Override)
方法重写的规则:
- 发生在父类和子类之间
- 同名同参同返回值
- 方法体不同(super和this)
- 子类的权限修饰符必须要大于或者等于父类的权限修饰符(public>protected>default>private)
3、构造器
1、和类名相同
2、没有返回值
作用:
1、new 本质在调用构造方法
2、初始化对象的值
4、创建对象内存分析
Application类
package oop.demo;
public class Application {
public static void main(String[] args) {
Pet dog = new Pet();
dog.name = "旺财";
dog.age = 3;
dog.shout();
System.out.println(dog.name);
System.out.println(dog.age);
Pet cat = new Pet();
}
}
Pet类
package oop.demo;
public class Pet {
public String name;
public int age;
//无参构造
public void shout(){
System.out.println("叫了一声");
}
}
5、封装、继承、多态
面向对象编程的本质是:以类的方式组织代码,以对象的组织(封装)数据
面对对象的三大特性:封装、继承、多态
1.封装
程序设计要追求“高内聚,低耦合”
属性私有,get/set
封装的意义:
- 提高程序的安全性,保护数据
- 隐藏代码的实现细节
- 统一接口
- 增加系统可维护性
2.继承
- Java中通过extends关键字来实现继承
- 子类又被称为派生类; 父类又被称为超类
- Java只允许单继承不允许多继承(一个子类继承一个父类)
作用:
- 继承的出现提高了代码的复用性
- 继承的出现让类与类之间产生了关系,提供了多态的前提
- 不要仅为了获取其他类中的某个功能去继承(继承是要有逻辑关系在里面的,不要随意继承)
3.多态
多态存在的条件:
- 有继承关系
- 子类重写父类的方法
- 父类引用指向子类对象
- 多态是方法的多态,属性没有多态性
6、==和equals区别
- 对于对象来说,特殊的类:如String、File、Date,使用==比较的是对象(对象的地址),equals比较的内容
- 除了特殊的类之外的其他普通的类的对象,==和equals比较的都是对象(对象的内存地址)
- 如果你想改变某一个类的equals,不想用equals来比较对象的内存地址,就需要重写equals方法
7、final
- final修饰的类不能被继承
- final修饰的方法不能被子类重写
- final修饰的变量是常量,常量必须显示赋值(常量定义名称约定使用大写,如果多个单词组成名称,用_连接;常量只能赋值一次,不能再改变)
8、抽象类
- 用abstract关键字来修饰一个类时,这个类叫做抽象类,用abstract来修饰一个方法时,该方法叫做抽象方法
- 含有抽象方法的类必须被声明为抽象类
- 抽象类不能被实例化,抽象类是用来作为父类被继承的,抽象类的子类必须重写父类的抽象方法,并提供方法体
- 不能用abstract修饰属性、私有方法、构造器、静态方法、final的方法
9、接口
如果类没有实现接口的所有方法,这个类就要定义成抽象类
如果一个类既继承父类,又实现接口;那么先继承,再实现
定义Java类的语法格式:先写extends,后写implements
接口可以继承接口
public interface Test {
int ID = 1;//等同public static final int ID = 1;
void test();//等同public abstract void test();
}
10、异常
子类重写父类的方法时,子类不能抛出比父类方法更大范围的异常
11、IO流
- 当字节流中的数据都是字符的时候,使用转换流转换为字符流处理效率更高
- 字节流转换字符流的时候,设置的字符集编码要与读取文件的字符集编码相一致,不然就会出现乱码
12、反射
Java能够反射的前提是:已经加载过这个类,就可以通过类名来寻找到这个类的所有相关信息