Download presentation
Presentation is loading. Please wait.
1
辅导课程十五
2
动态绑定/多态 (dynamic-binding late-binding runtime-binding polymorphism)
动态绑定是指“在执行期间(而非编译期)判断所引用对象的实际类型,根据其实际的类型调用其相应的方法。 上面例子中,根据 Lady 对象的成员变量 pet 所引用的不同的实际类型而调用相应的 enjoy()方法。 TestPolymorph/Test.java
3
heap stack name:”catname” enjoy() Animal:enjoy() c:xx code seg
4
heap stack name:”catname” enjoy() eyeColor:”blue” Animal:enjoy() Cat:enjoy() c:xx code seg
5
heap stack name:”catname” enjoy() eyeColor:”blue” Animal:enjoy() Cat:enjoy() c:xx code seg
6
heap stack name:”catname” enjoy() eyeColor:”blue” name:”l1” Animal:pet
l1:xx Animal:enjoy() Cat:enjoy() c:xx code seg
7
根据上面的程序,构造“Bird”类,继承“Animal”类。要求: 增加“毛色(String)”属性。
多态的优点 课堂练习 TestPolymorph/Test.java 根据上面的程序,构造“Bird”类,继承“Animal”类。要求: 增加“毛色(String)”属性。 具有和“Dog”类相似的重载构造方法。 重写“Animal”类的enjoy()方法 测试。思考:需要修改“Lady”类的方法吗?
8
要有继承;要有重写;父类引用指向子类对象
多态的优点 class Bird extends Animal { private String featherColor; Bird(String n,String f) { super(n); featherColor = f; } public void enjoy() { System.out.println(“鸟叫声 “); public class Test { public static void main(String args[]){ Bird b = new Bird(“birdname“, “green“) Lady l3 = new Lady(“l3“, b)); l3.myPetEnjoy(); } 多态的存在要有3个必要条件: 要有继承;要有重写;父类引用指向子类对象
9
抽 象 类 用abstract关键字来修饰一个类时,这个类叫做抽象类;用abstract来修饰一个方法时,该方法叫做抽象方法(相当于C++中的纯虚函数)。 含有抽象方法的类必须被声明为抽象类,抽象类必须被继承,抽象方法必须被重写。如果重写不了,应该声明自己为抽象。 抽象类不能被实例化。 抽象方法只需声明,而不需实现。 abstract class Animal { private String name; Animal(String name) { this.name = name; } public abstract void enjoy(); class Cat extends Animal { private String eyesColor; Cat(String n,String c) { super(n); eyesColor = c; public void enjoy() { System.out.println(“猫叫声....."); TestAbstract/Test.java
10
heap stack name:”catname” enjoy() c:xx code seg
11
heap stack name:”catname” enjoy() eyeColor:”blue” Cat:enjoy() c:xx code seg
12
heap stack name:”catname” enjoy() eyeColor:”blue” Cat:enjoy() c:xx code seg
13
heap stack name:”catname” enjoy() eyeColor:”blue” name:”l1” Animal:pet l1:xx Cat:enjoy() c:xx code seg
Similar presentations