封装
get set
快捷键:Alt + insert 自动生成封装函数
继承
1. 基本写法
public Students extends Person
复制代码
private子类不继承
public子类继承
快捷键:ctrl + H 出现继承树
Java中所有类继承Object类
2. super
- 子类的构造方法会调用父类的构造方法,必须在构造方法首句
- super只能出现在子类的方法中
- 构造方法中不能同时出现super()和this()
重写
父类的引用可以指向子类
class B
class A extends B {}
B b = new A();
复制代码
需要有继承关系,子类重写父类的方法
- 方法名必须相同
- 参数列表必须相同
- 修饰符范围可以扩大,但不能缩小:public > protected > default > private
- 抛出的异常范围可以缩小,但不能扩大
重写,子类方法和父类相同,方法体不同
为什么要重写: 父类的功能子类不一定需要 Alt + insert; override;
多态
public class Person {
public void run(){
System.out.println("run");
}
}
public class Students extends Person {
@Override
public void run() {
System.out.println("son");
}
}
public class Application {
public static void main(String[] args) {
//一个对象的实际类型是确定的
/*
new Students()
new Person()
*/
//可以指向的指针类型不确定,父类的引用指向子类
//s1是Student类,可以调用自己和继承父类的方法
Students s1 = new Students();
//s2是Person类,可以指向子类,但不能调用子类独有的方法
Person s2 = new Students();
Object s3 = new Students();
//对象能执行哪些方法,看左边的类型,和右边关系不大!
s2.run(); //子类了重写父类的方法,执行子类的方法
s1.run();
}
}
复制代码
运行结果:
多态注意事项
- 多态是方法的多态,属性无多态
- 父类和子类,有联系(类型转换异常 ClassCastException!)
- 存在条件:继承关系,方法重写,父类引用指向子类的对象
Father f1 = new Son();
复制代码
不能重写的情况
- static修饰的方法属于类,不属于实例
- final常量
- private方法