声明 变量名 = 数据;
这时创建一个变量的基本格式; 思考下为什么要有声明这个环节;
为什么不直接 变量名 = 数据; 或者说 声明到底是在做一件什么事情?
在Java中声明是说明该变量中的数据是什么类型的或者说有哪些类型的数据(对于引用数据);
就相当于告诉计算机我声明的这个变量中的数据类型;
在理解标题上面的问题时,还需要了解一个问题; 为了理解我先创建两个类
class fatherClass {
int a;
public void method(int b) {
a = b;
}
}
class sonClass extends fatherClass {
int a;
@override
public void method(int b){
a = b;
}
}
fatherClass t = new sonClass();
声明 "t "中的数据是一个对象里面 有 a 和 方法mthod;
但是实际里面存储的属性和方法;
{
int a; // 父类;
int a; // 子类;
method() // 父类;
mehod() // 子类;
}
现在来解决标题的问题;
现在 "t" 中的 属性或者方法时父类的还是子类的?;
现在类型声明告诉计算机 "t" 变量 是一个对象类型 里面有 a 属性且为 int 类型; 有方法method;
同时表明你只能使用声明的这些属性或者方法;
因为你用的是父类的声明,就都只能用父类的属性和方法;
{
int a; // 父类; 可用
int a; // 子类; 不可用
method() // 父类; 可用
mehod() // 子类; 不可用;
}
对于会使用Java的来说此时有点懵, 因为明明使用的是 父类的a 属性 子类的method方法;
那是因为重写声明; 子类中的method 有@override 重写声明, 所以此时你用的就是子类的方法;
当你把子类的重写声明去掉后,你使用的就是父类的method方法了;
出一个问题:
fatherClass t = new sonClass();
t.method(1);
问: 此时 method方法体中的 a = b 改变的是 子类中的a 还是父类中的a?
上面说的 属性或方法的可用是指,你在类的外部能否获取值或调用方法;
因为 t.method();调用的是子类的method方法, 优先使用子类中的a; 所以此时改变的是子类中的a;
其实还有其他案例问题的; 但是又觉得如果你理解了上面的问题,那么下面我提出的问题就显得有点啰嗦了;
下一期在加上泛型的概念去了解父类泛型的声明, 子类中的重写方法中的泛型时什么类型的数据;
以及类型转换的时候系统做了哪些事?