为什么可以向上转型?
    我们在继承的时候,为导出类提供方法和属性不是重要的,“导出类是基类的一种类型”,这种关系是需要我们重视的,对次关系最为合理的解释便是向上转型了。

    1. class Instrument {
    2. public void paly() {
    3. System.out.println("1111111111");
    4. }
    5. static void function(Instrument instrument) {//自己调用自己
    6. instrument.paly();
    7. }
    8. }
    9. public class Wind extends Instrument {
    10. public static void main(String[] args) {
    11. Wind wind = new Wind();
    12. Instrument.function(wind);//向function传入导出类(子类)的实例,会自己动转向基类(父类)的引用。(向上转型)
    13. }
    14. }
    15. //Output:
    16. 1111111111
    1. 如果我们需要向上转型,那么我们必须要使用继承。
    2. 思考?普通的方法可以被继承覆写(重写),那么静态方法呢?静态域呢?<br /> java中静态域能被继承吗?
    1. package com.it.chapter07;
    2. class Foo{
    3. static String name="asd";
    4. static String str1="ccc";
    5. public static void getName(){
    6. System.out.println("Foo中的name"+name);
    7. }
    8. }
    9. class Soo extends Foo{
    10. static String name="foo";
    11. /* @Override//不能被重写,所以也就不能实现多态
    12. public static void getName(){
    13. System.out.println("Foo中的name"+name);
    14. }*/
    15. }
    16. public class StaticDemo {
    17. public static void main(String[] args) {
    18. Soo.getName();//调用的是父类的方法
    19. System.out.println(Foo.name);
    20. System.out.println(Soo.str1);
    21. Foo foo=new Soo();
    22. foo.getName();
    23. }
    24. }
    25. Foo中的nameasd
    26. asd
    27. ccc
    28. Foo中的nameasd
    1. 我们发现java中的静态域和静态方法不能被重写,但可以被继承。<br />到这里我们会思考?我们什么时候要去用向上转型呢?在那样的业务场景中会用到呢?
    1. package com.zx.test07.test07_01;
    2. import java.util.concurrent.CopyOnWriteArrayList;
    3. class Computer {
    4. //电脑主要硬件
    5. String name;
    6. public void frame(Computer computer) {
    7. System.out.println("ASUA");
    8. computer.yingpan();
    9. }
    10. //硬盘
    11. void yingpan() {
    12. System.out.println( "512硬盘");
    13. }
    14. }
    15. public class UpDemo extends Computer {
    16. void yingpan() {
    17. System.out.println("机械硬盘");
    18. }
    19. public static void main(String[] args) {
    20. Computer computer = new Computer();
    21. computer.frame(computer);
    22. System.out.println("为电脑换硬盘后+ ");
    23. UpDemo upDemo = new UpDemo();
    24. upDemo.frame(upDemo);
    25. }
    26. }
    27. //Output:
    28. ASUA
    29. 512硬盘
    30. 为电脑换硬盘后+
    31. ASUA
    32. 机械硬盘
    1. 我们在为电脑更换硬盘时,并不需要为该变电脑的整体只需要更换硬盘就好。同样的,我们在程序中如果要固定某个流程,那么我们就可以把一些需要优化的拿出来,由子类去优化。