uml结构图讲解(概述耦合UML)
uml结构图讲解(概述耦合UML)public class Son extends Father { public void speaking(List list) { System.out.println("子类: " list.get(0)); } } 复制代码测试类 Testpublic class Father { public void speaking(ArrayList arrayList) { System.out.println("父类: " arrayList.get(0)); } } 复制代码子类 Son③ 当子类的方法重载父类的方法时,子类方法的前置条件(即方法的输入参数)要比父类的方法更宽松这里要注意,我们说的是重载,可不是重写,下面我们按照里氏替换原则要求的,将父类方法参数范围设小一点 (Ar
子类 Son
public class Son extends Father {
public void playGuitar () {
System.out.println("这是Son类playGuitar方法");
}
}
复制代码
测试类 Test
public class Test {
public static void main(String[] args) {
// 直接调用父类运行的结果
Father father = new Father();
father.speaking("speaking方法被调用");
// Son子类替换父类运行的结果
Son son = new Son();
son.speaking("speaking方法被调用");
son.playGuitar();
}
}
复制代码
运行结果:
父类: speaking方法被调用 父类: speaking方法被调用 这是Son类playGuitar方法
③ 当子类的方法重载父类的方法时,子类方法的前置条件(即方法的输入参数)要比父类的方法更宽松
这里要注意,我们说的是重载,可不是重写,下面我们按照里氏替换原则要求的,将父类方法参数范围设小一点 (ArrayList) ,将子类同名方法参数范围写大一些 (List) ,测试后的结果,就是只会执行父类的方法,不执行父类重载后的方法(注:参数名虽然相同,但是类型不同,还是重载,不是重写)
父类 Father
public class Father {
public void speaking(ArrayList arrayList) {
System.out.println("父类: " arrayList.get(0));
}
}
复制代码
子类 Son
public class Son extends Father {
public void speaking(List list) {
System.out.println("子类: " list.get(0));
}
}
复制代码
测试类 Test
public class Test {
public static void main(String[] args) {
ArrayList arrayList = new ArrayList();
arrayList.add("speaking方法被调用");
// 直接调用父类运行的结果
Father father = new Father();
father.speaking(arrayList);
// Son子类替换父类运行的结果
Son son = new Son();
son.speaking(arrayList);
}
}
复制代码