第一点
public class Waring { public static void main(String[] args) { //属性没有重写之说!属性的值看编译类型
//编译类型是baseBase base = new Sub();//向上转型System.out.println(base.count);// ? 看编译类型 10//编译类型是subSub sub = new Sub();System.out.println(sub.count);//? 20}
}
class Base { //父类 int count = 10;//属性 }
class Sub extends Base {//子类 int count = 20;//属性 }
<a name="Kdggo"></a>## 案例二:```javapublic class Waring02 {public static void main(String[] args) {//编译类型是SubSub s = new Sub();//看编译类型System.out.println(s.count);//20//看运行类型s.display();//20//编译类型是BaseBase b = s;System.out.println(b == s);//T//看编译类型System.out.println(b.count);//10b.display();//20}}class Base {//父类int count = 10;public void display() {System.out.println(this.count);}}class Sub extends Base {//子类int count = 20;@Overridepublic void display() {System.out.println(this.count);}}
第二点
- instanceOf比较操作符,用于判断对象的运行类型是否为XX类型或者XX类型的子类型 ```java package detail;
public class Waring01 { public static void main(String[] args) { BB bb = new BB(); System.out.println(bb instanceof BB);// true System.out.println(bb instanceof AA);// true
//aa 编译类型 AA, 运行类型是BB//BB是AA子类AA aa = new BB();System.out.println(aa instanceof AA);System.out.println(aa instanceof BB);Object obj = new Object();System.out.println(obj instanceof AA);//falseString str = "hello";//System.out.println(str instanceof AA);//报错!!!System.out.println(str instanceof Object);//true}
}
class AA {//父类 }
class BB extends AA {//子类
}
```

