Go语言上手-基础语言 | 青训营笔记

81 阅读2分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的的第3篇笔记 public class Fu { } }

public class Zi extends Fu { Fu fu=new Fu(); Zi zi=new Zi(); Fu fu1=new Zi(); //多态 Zi zi1=new Fu(); //错误 } } 为什么需要多态?限制子类的能力。 public class Fu { void fu1() { System.out.println("执行父类中的方法fu1"); }

void fu2() {
    System.out.println("执行父类中的方法fu2");
}

}

public class Zi1 extends Fu { void zi1() { //这个方法是Zi1特有的,新加入的方法 System.out.println("执行子类Zi1中的方法zi1"); }

@Override
void fu2() {
    System.out.println("执行子类Zi1中覆盖过后的父类中的方法fu2");
}

}

public class Zi2 extends Fu { void zi1() { //这个方法是Zi2特有的,新加入的方法 System.out.println("执行子类Zi2中的方法zi1"); }

void zi2() {  //这个方法是Zi2特有的,新加入的方法
    System.out.println("执行子类Zi2中的方法zi2");
}

@Override
void fu2() {
    System.out.println("执行子类Zi2中覆盖过后的父类中的方法fu2");
}

}

Zi1和Zi2都覆盖了父类的fu2方法,让这个方法按照自己的意思去做。 Zi1和Zi2还额外添加了自己的一些方法。

面试重点: new出来是谁就是谁 public class Test { public static void main(String[] args) { Fu fu=new Zi1();//多态 Zi1 zi1=(Zi1) fu; //强制类型转换除了用于基本类型,还可以用于父子类(继承) //new出来的Zi1就是Zi1,就算他被放在Fu的变量里,他也是Zi1,此处只是通过强制类型转换再把他换回去而已

    Fu f=new Fu();
    Zi1 zi11=(Zi1) f;//此处不会有语法错误,而是运行时错误 Fu类无法强转为Zi1
}

}

instanceof 运算符 语法: 变量/对象 instanceof 类名 这个运算符的含义是:如果前面的对象/变量确实能被转换为后边的类型,就return true,否则返回false public class Test { public static void main(String[] args) { Fu fu = new Zi1();//多态 Zi1 zi1 = (Zi1) fu; //强制类型转换除了用于基本类型,还可以用于父子类(继承) //new出来的Zi1就是Zi1,就算他被放在Fu的变量里,他也是Zi1,此处只是通过强制类型转换再把他换回去而已

    Fu f = new Fu();
    if (f instanceof Zi1) {
        Zi1 zi11 = (Zi1) f;//此处不会有语法错误,而是运行时错误 Fu类无法投给Zi1
    }else{
        System.out.println("不能强转");
    }
}

}

一切数值类型的父类都是Number,Number的父类是Object