一、包的访问权限
1.public:本类、同包、不同包子类、不同包且非子类
2.protected:本类、同包、不同包子类
3.缺省:本类、同包
4.private:本类
二、对类的访问权限只有public和缺省两种,但是可以写成内部类
1.创建内部类
2.先创建外部类,再用外部名去点new内部类
Student st = new Student(); //外部类
T t1 = st.new T(); //第一种
T t2 = new Student().new T(); //第二种
三、什么是方法覆写?
1.子类中定义了与父类中同原型的方法,就称为方法的覆写
同原型方法:
- 访问控制符:子类的要比父类的访问权限要大,或者是相同
- 方法名相同
- 返回值类型一样
- 参数列表一样
四、方法覆写时所考虑的权限
1.访问控制符:子类的要比父类的访问权限要大,或者是相同
2.但这并不一定就会存在方法的覆写,比如说父类的访问权限为private
五、方法覆写的特点
1.方法重写必须发生在继承关系中,并且子类中出现父类中同原型的方法,那么认为子类的方法覆盖了父类的方法;
2.子类的实例调用被覆盖的方法,将调用的是自己的方法,而父类的方法将被隐藏;
3.如果子类想要访问父类中的方法,则必须使用super关键字来完成
一般语法:super.方法名
六、关于方法的调用问题
1.如果不使用super调用,直接调用print()也可以,但是前提方法不能被覆写,否则会出现死循环;
2.直接调用print()方法,相当于隐藏了一个this.print()方法,它会最先在本类中去找其方法,再依次从上至下去寻找。
七、方法重写和方法重载的区别
区别点 | 重载 | 覆写 |
---|---|---|
单词 | Overloading | Overriding |
定义 |
只要方法名相同、参数列表不同、 个数不同、在同一作用域中 对权限没有要求
|
方法名称、参数的类型、 返回值类型全部相同 被覆盖的方法不能拥有更严格的权限 |
范围 | 发生在一个类中 | 发生在继承类中 |
八、属性的覆盖
1.主要是指子类中声明了与父类同名的属性
2.一般很少去研究它, 因为其意义不大
五、引用转型
1.基类的引用指向派生类的对象
Person per = new Student();
2.派生类的引用不可以指向基类的对象
Student st = new Person();
六、多态
1.父类引用指向哪个子类的实例就是调用哪个类中的方法
2.父类的引用指向子类的对象时,调用的都是一个方法,但是却有不同的结果
3.多态分为静态多态和动态多态
七、多态的分类
1.静态多态:方法重载
在编译器就能确定调用某个方法
2.动态多态:方法重写
程序运行时才确定调用某个方法
3.条件
- 必须要有继承的情况
- 在继承中必须要有方法覆盖
- 必须由基类的引用指向派生类的对象,并且通过基类的引用调用被覆盖的方法