第一点

  • 属性没有重写之说!属性的值看编译类型。

    案例一:

    ```java package detail;

public class Waring { public static void main(String[] args) { //属性没有重写之说!属性的值看编译类型

  1. //编译类型是base
  2. Base base = new Sub();//向上转型
  3. System.out.println(base.count);// ? 看编译类型 10
  4. //编译类型是sub
  5. Sub sub = new Sub();
  6. System.out.println(sub.count);//? 20
  7. }

}

class Base { //父类 int count = 10;//属性 }

class Sub extends Base {//子类 int count = 20;//属性 }

  1. ![image.png](https://cdn.nlark.com/yuque/0/2021/png/21705001/1638541554918-6602839d-825f-4a4c-bac8-0bfd5691fc09.png#clientId=u0b376ae9-bb67-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=203&id=u3b343a01&margin=%5Bobject%20Object%5D&name=image.png&originHeight=167&originWidth=616&originalType=binary&ratio=1&rotation=0&showTitle=false&size=14242&status=done&style=none&taskId=u31be4e7c-6ca0-4e2d-a79b-28f5bbc8bf5&title=&width=750)
  2. <a name="Kdggo"></a>
  3. ## 案例二:
  4. ```java
  5. public class Waring02 {
  6. public static void main(String[] args) {
  7. //编译类型是Sub
  8. Sub s = new Sub();
  9. //看编译类型
  10. System.out.println(s.count);//20
  11. //看运行类型
  12. s.display();//20
  13. //编译类型是Base
  14. Base b = s;
  15. System.out.println(b == s);//T
  16. //看编译类型
  17. System.out.println(b.count);//10
  18. b.display();//20
  19. }
  20. }
  21. class Base {//父类
  22. int count = 10;
  23. public void display() {
  24. System.out.println(this.count);
  25. }
  26. }
  27. class Sub extends Base {//子类
  28. int count = 20;
  29. @Override
  30. public void display() {
  31. System.out.println(this.count);
  32. }
  33. }

image.png

第二点

  • 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

  1. //aa 编译类型 AA, 运行类型是BB
  2. //BB是AA子类
  3. AA aa = new BB();
  4. System.out.println(aa instanceof AA);
  5. System.out.println(aa instanceof BB);
  6. Object obj = new Object();
  7. System.out.println(obj instanceof AA);//false
  8. String str = "hello";
  9. //System.out.println(str instanceof AA);//报错!!!
  10. System.out.println(str instanceof Object);//true
  11. }

}

class AA {//父类 }

class BB extends AA {//子类 } ``` image.png