1. 一个类是由三部分组成的:成员变量、成员方法、构造器
2. 继承中成员变量有关的问题:
2.1 子类不会继承父类中的私有成员变量;子类会继承父类中的非私有的成员变量;
2.2 如果子类需要访问父类中的私有成员变量,怎么实现?--可能过父类的读写器来调用
2.3 如果子类中声明的成员变量与父类中的成员变量名相同,则会覆盖掉继承过来的成员变量。"变量覆盖"
--要绕过这种变量覆盖,也可以使用super关键字
3. 继承中成员方法有关的问题:
3.1 子类不会继承父类中的私有成员方法;子类可以继承父类中的非私有的成员方法;
3.2 子类中的方法和父类中的方法同名,称为“方法重写” ->"方法覆盖"
如果想绕过方法覆盖,怎么办?(想调用超类中被覆盖的方法) -- 使用super关键字
3.3 @Override注解
3.4 在方法继承中,子类中重写的方法的访问权限,不能小于超类中被覆盖的方法的访问权限。
3.5 如果子类中有与父类中同名的方法,但方法签名不同,这实际上是“方法重载”
3.6 当然了,在子类中,也可以增加自己新的方法。
4. 继承中的构造器有关的问题:
4.1 构造器无法被继承
4.2 构造器主要是用来对成员变量进行初始化(其它还包括加载资源、建立网络连接....)
--通过super()来调用超类的构造器,完成对从超类中继承过来的成员的初始化
4.3 如果不指定的话,默认子类的构造器会首先调用超类的无参数构造器。
4.4 对super的调用必须是构造器中的第一个语句
4.5 如果有多重继续的话,就会形成构造器链
5. Java中,所有的类都是Object的类的子类。如果一个类,没有明确指定其父类,那么默认它就是从Object类继承过来的。
一个子类只能有一个直接父类(单继承)。但是可以有多个间接的超类。
子类会继承它所有的超类(直接的和间接的)当中可以继承的成员。
6. 静态成员在继承时需要注意的问题
6.1 当子类中有与父类中相同的静态成员变量时,子类中的静态变量会“隐藏”超类中的静态变量。隐藏变量的值,以声明的类型为准。
6.2 当子类中有与父类中相同的静态成员方法时,子类中的静态方法会“隐藏”超类中的静态方法。
7. 对象类型转换
7.1 某个子类继承自某个超类,那么可以这样说:它有两个数据类型,一个是自身的类型,一个是其超类的类型。
7.2 在使用对象类型转换时,最好是使用instanceof关键字,判断一下该对象的实际类型
8. 多态
同一个对象,在不同的时候执行相同的方法,却表现出不同的行为。
--------------------------------------------------------------------------------------------------------------------------------------------
以上来自我的老师
继承其实就是把不是自己的变为自己的。
当类B继承了类A,其实是把A中所有东西复制到B中,但是B只能访问父类A中共有的属性和方法,但是A不能够访问B中任何东西。
一下是一个实例:
class A{
static int a = 3;
int k = 2;
}
class AA extends A{
static int a = 5; //变量隐藏
int k = 4;
}
public class Demo12{
public static void main(String[] args){
AA aa = new AA();
System.out.println(aa.a); //5
System.out.println(aa.k); //4
A a = new A();
System.out.println(a.a); //3
System.out.println(a.k); //2
A aaa = new AA();
//向上转型
System.out.println(aaa.a); //3
System.out.println(aaa.k); //2
}
}