知识点1:
this与super
关键字this 有两个用途:一是引用隐式参数;二是调用该类其他的构造器;
关键字super也有两个用途:一是调用超类的方法;二是调用超类的构造器;
二者调用构造器必须都放在第一行;
也就是说由于子类实例化的时候一定会调用父类的构造器(将父类实例化),所以子类中有几个构造函数,父类中就必须有几个构造函数。
注意:
抽象类其实是可以实例化的,但是他的实例化方式不是通过new方式来创建对象,而是通过父类的引用来指向子类的实例来间接地实现父类的实例化(因为子类要实例化前,一定会先实例化他的父类。这样创建了继承抽象类的子类的对象,也就把其父类(抽象类)给实例化了).但是:接口是不能被实例化的(接口压根就没有构造函数)。
==========================================================================================
知识点2:
继承相关的基础知识:
一、父类引用指向子类对象时:
Fu fu = new Zi();
- 若子类覆盖父类某方法,则调用子类重写后的方法;
- 若子类未覆盖父类方法,则调用父类本身的旧方法;
- 若子类覆盖某属性,父类引用仍旧调用父类本身的旧属性;
- 若子类未覆盖某属性,父类调用本身的旧属性;
- 父类引用无法调用子类特有的方法(向上转型了);
二、子类引用指向自身对象时:
Zi zi = new Zi();
- 若子类覆盖父类某方法,则调用子类重写后的方法;
- 若子类未覆盖父类方法,则调用父类本身的旧方法;
- 若子类覆盖某属性,子类调用覆盖后的新属性;
- 若子类未覆盖某属性,子类调用父的属性;
- 子类可以调用父类方法和子类特有方法;
三、子类不能重写父类静态方法,抽象类可以定义静态方法;
==========================================================================================
知识点3:
1、方法的名字和参数列表称为方法的签名,返回类型不是签名的一部分;
2、在java SE 5.0以前,要求返回类型必须一样,现在允许子类将覆盖方法的返回值类型定义为原返回类型(父类返回类型)的子类型;
3、父类中private修饰的方法无法被继承,因为子类修饰的权限必须大于父类的;包括父类的私有属性也是无法被子类直接继承的,子类是通过继承父类的set和get方法而间接获取属性值的;
4、父类中的静态方法只能被子类中的静态方法覆盖重写;
==========================================================================================
知识点4:
final关键字:
- final修饰的类不可被继承;
- final修饰的方法不可被重写,但是可以被子类继承;
- final修饰的变量不可以修改(只允许赋值一次);
- 全局常量 public static final n = 1;
- 将方法或者类声明为final主要鉴于以下原因:确保它们不会在子类中改变语义;
=========================================================================================
知识点5:
抽象类中抽象方法不能有哪些关键字:
1、private:因为private修饰的抽象方法不能被覆盖,属性和非抽象方法可以使用private,只是子类无法继承;
2、static:因为static修饰的抽象方法无法被子类继承,属性和非抽象方法可以使用;
3、final:因为final修饰的抽象方法不能被覆盖,属性和非抽象方法可以使用final;
========================================================================================
知识点6:
static关键字:
1、所有对象共享数据用static修饰;
2、static修饰的成员随着类的建立而出现,优先于对象的存在;
3、static修饰的成员有多种调用方式;
4、成员变量存储在堆内存的对象中,所以叫对象特有数据;静态变量存储在方法区(数据共享区)的静态区中;
5、静态方法中不可以使用this或者super关键字(https://blog.youkuaiyun.com/u010479322/article/details/51730275)