为什么可以向上转型?
我们在继承的时候,为导出类提供方法和属性不是重要的,“导出类是基类的一种类型”,这种关系是需要我们重视的,对次关系最为合理的解释便是向上转型了。
class Instrument {public void paly() {System.out.println("1111111111");}static void function(Instrument instrument) {//自己调用自己instrument.paly();}}public class Wind extends Instrument {public static void main(String[] args) {Wind wind = new Wind();Instrument.function(wind);//向function传入导出类(子类)的实例,会自己动转向基类(父类)的引用。(向上转型)}}//Output:1111111111
如果我们需要向上转型,那么我们必须要使用继承。思考?普通的方法可以被继承覆写(重写),那么静态方法呢?静态域呢?<br /> java中静态域能被继承吗?
package com.it.chapter07;class Foo{static String name="asd";static String str1="ccc";public static void getName(){System.out.println("Foo中的name"+name);}}class Soo extends Foo{static String name="foo";/* @Override//不能被重写,所以也就不能实现多态public static void getName(){System.out.println("Foo中的name"+name);}*/}public class StaticDemo {public static void main(String[] args) {Soo.getName();//调用的是父类的方法System.out.println(Foo.name);System.out.println(Soo.str1);Foo foo=new Soo();foo.getName();}}Foo中的nameasdasdcccFoo中的nameasd
我们发现java中的静态域和静态方法不能被重写,但可以被继承。<br />到这里我们会思考?我们什么时候要去用向上转型呢?在那样的业务场景中会用到呢?
package com.zx.test07.test07_01;import java.util.concurrent.CopyOnWriteArrayList;class Computer {//电脑主要硬件String name;public void frame(Computer computer) {System.out.println("ASUA");computer.yingpan();}//硬盘void yingpan() {System.out.println( "512硬盘");}}public class UpDemo extends Computer {void yingpan() {System.out.println("机械硬盘");}public static void main(String[] args) {Computer computer = new Computer();computer.frame(computer);System.out.println("为电脑换硬盘后+ ");UpDemo upDemo = new UpDemo();upDemo.frame(upDemo);}}//Output:ASUA512硬盘为电脑换硬盘后+ASUA机械硬盘
我们在为电脑更换硬盘时,并不需要为该变电脑的整体只需要更换硬盘就好。同样的,我们在程序中如果要固定某个流程,那么我们就可以把一些需要优化的拿出来,由子类去优化。
