import java.util.ArrayList;
class A1{
public void fun1() {
System.out.println("方法一");
}
public void fun2() { //他可以去调用子类的方法1
System.out.println("方法2");
fun1();
}
}
class B1 extends A1{
public void fun1(){
System.out.println("重写A1的方法1");
}
public void fun3(){
System.out.println("33333");
}
}
public class Test {
public static void main(String[] args) {
A1 a = new B1();//子类能自动的转换成父类
callA(a);
}
//编译器自动将 类B1转换成A1类型
public static void callA(A1 a1){
a1.fun1();//其实他还是调用的b1中的方法 这就是多态 这里只要传入A1的子类就行 以不变应万变 达到代码 的复用性 可扩充性 可维护性 模块化可插拔
//派生类的功能可以被基类所引用 这叫向后兼容
a1.fun2();//因为b1子类中没有覆盖a1中的fun2方法 那么久只能通过子类 调用父类a1的fun2 fun2又调用了fun1
fun1 又被子类重写了 所以就执行的是子类的fun1 以后写的程序可以被现在的程序调用
}
class A1{
public void fun1() {
System.out.println("方法一");
}
public void fun2() { //他可以去调用子类的方法1
System.out.println("方法2");
fun1();
}
}
class B1 extends A1{
public void fun1(){
System.out.println("重写A1的方法1");
}
public void fun3(){
System.out.println("33333");
}
}
public class Test {
public static void main(String[] args) {
A1 a = new B1();//子类能自动的转换成父类
callA(a);
}
//编译器自动将 类B1转换成A1类型
public static void callA(A1 a1){
a1.fun1();//其实他还是调用的b1中的方法 这就是多态 这里只要传入A1的子类就行 以不变应万变 达到代码 的复用性 可扩充性 可维护性 模块化可插拔
//派生类的功能可以被基类所引用 这叫向后兼容
a1.fun2();//因为b1子类中没有覆盖a1中的fun2方法 那么久只能通过子类 调用父类a1的fun2 fun2又调用了fun1
fun1 又被子类重写了 所以就执行的是子类的fun1 以后写的程序可以被现在的程序调用
}
}
打印结果:
重写A1的方法1
方法2
重写A1的方法1