1.protect关键字: 对于任何继承自此类的的类或者是其他任何位于同一个包内的类来说,是可以访问的
2. 向上转型 是从一个较专用的类型向较通用的类型转换,是安全的
3.final: 通常是指 这是无法改变的! 用于对象引用, final使引用恒定不变,即一旦引用被初始化指向一个对象,就无法再把他改为指向另一个对象,然而对象自身确是可以改变的
4.一个方法明确禁止覆盖时,将其设置为final, 类中所有的private方法都隐式指定为 final !!!!!!!!!
5. 一个类被final修饰时,其不可被继承
6. 定义为static的东西只会被初始化一次!
7.多态就是同一个接口,使用不同的实例而执行不同操作!
多态存在的三个必要条件: 继承 / 重写 / 父类引用指向子类对象
class Animal{
public int month = 2;
public void eat(){
System.out.println("动物吃东西");
}
}
class Dog extends Animal{
public int month = 3;
public void eat() {
System.out.println("小狗吃肉");
}
public void sleep() {
System.out.println("小狗睡午觉");
}
}
class Cat extends Animal{
public int month = 4;
public void eat() {
System.out.println("小猫吃鱼");
}
}
public class Test {
public static void main(String[] args){
Animal a = new Dog();
Animal b = new Cat();
a.eat();
System.out.println(a.month);
b.eat();
System.out.println(b.month);
}
}
小狗吃肉
2
小猫吃鱼
2
a对象编译时类型是Animal,运行时类型是Dog;
b对象编译时类型是Animal,运行时类型是Cat。
当运行时调用引用变量的方法时,其方法行为总是表现出子类方法的行为特征,而不是父类方法的行为特征,这就表现出:相同类型的变量调用同一个方法时表现出不同的行为特征,这就是多态。
该例中:当他们调用eat方法时,实际调用的是父类Animal中被覆盖的eat方法。
对象的实例变量不具备多态性
上例中a,b对象分别调用了month,可以看到,其输出结果都是2