java多态基础入门
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1 多态概述
●多态概述
•某一个事物,在不同时刻表现出来的不同状态。
•举例:
•猫可以是猫的类型。猫 m = new 猫();
•同时猫也是动物的一种,也可以把猫称为动物。
•动物 d = new 猫();
•在举一个例子:水在不同时刻的状态
●多态前提和体现
•有继承关系
•有方法重写
•有父类引用指向子类对象
●1:通过猫这个小动物,说猫可以被称为猫,也可以被称为动物。在不同时刻,
猫表现出的不同状态,来说明多态。
多态案例及成员访问特点
●多态案例
•按照前提写一个多态的案例
•成员访问特点
●成员变量
●编译看左边,运行看左边
●成员方法
●编译看左边,运行看右边
●静态方法
●编译看左边,运行看左边
所以前面我说静态方法不能算方法的重写
面试题:
1:看程序写结果(先判断有没有问题,如果没有,写出结果)class Fu
{
public void show()
{
System.out.println("fu show");
}
}
class Zi extends Fu
{
public void show()
{
System.out.println("zi show");
}
public void method()
{
System.out.println("zi method");
}
}
class Test
{
public static void main(String[] args)
{
Fu f = new Zi();
f.method();
}
}
2:看程序写结果(先判断有没有问题,如果没有,写出结果)class A
{
public void show()
{
show2();
}
public void show2()
{
System.out.println("我");
}
}
class B extends A
{
public void show2()
{
System.out.println("爱");
}
}
class C extends B
{
public void show()
{
super.show();
}
public void show2()
{
System.out.println("你");
}
}
public class Test
{
public static void main(String[] args)
{
A a = new B();
a.show();
B b = new C();
b.show();
}
}
多态的好处和弊端
●多态的好处
•提高了程序的维护性(由继承保证)
•提高了程序的扩展性(由多态保证)
●多态的弊端
•不能访问子类特有功能
•那么我们如何才能访问子类的特有功能呢?
•多态中的转型
提高程序的扩展性。
3 多态中的转型问题
●向上转型
•从子到父
•父类引用指向子类对象
●向下转型
•从父到子
•父类引用转为子类对象
•多态成员访问及转型的理解
•孔子装爹案例
●1:案例演示时,子类提供一个父类没有功能。案例演示完毕后,画图解释。
●动物和猫,狗案例
●2:多态成员访问及转型的理解。孔子装爹案例
●3:判断下面的赋值哪些是正确的:最后,总结从右,往左看,是否能够读通。
如果可以,就正确,否则就错误。
●class Animal{}
●class Dog extends Animal{}
●class Cat extends Animal{}
●以及
●Animal p0 = new Animal();
●Dog p1 = new Dog ();
●Cat p2 = new Cat ();
●Animal p3 = new Dog ();
●Animal p4 = new Cat ();
●p0 = p1;
●p1 = p2;
●p1 = (Dog)p3;
●p2 = (Cat)p4;
4 多态练习
●猫狗案例练习多态版
●不同地方饮食文化不同的案例
•Person
•eat()
•SouthPerson
•eat()
•NorthPerson
•eat()
●1:人要吃饭
●2:南方人吃炒菜和米饭
●3:北方人吃烩菜和馒头
●先基本的调用,后多态调用。
5 抽象类概述
●抽象类概述
•回想前面我们的猫狗案例,提取出了一个动物类。并且我们在前面也创建过了动物对象,其实这是不对的。
为什么呢?因为,我说动物,你知道我说的是什么动物吗?只有看到了具体的动物,你才知道,这是什么动物。所以说,动物本身并不是一个具体的事物,而是一个抽象的事物。只有真正的猫,狗才是具体的动物。同理,我们也可以推想,不同的动物吃的东西应该是不一样的,所以,我们不应该在动物类中给出具体体现,而是应该给出一个声明即可。
●抽象类概述
•回想前面我们的猫狗案例,提取出了一个动物类。并且我们在前面也创建过了动物对象,其实这是不对的。
为什么呢?因为,我说动物,你知道我说的是什么动物吗?只有看到了具体的动物,你才知道,这是什么动物。所以说,动物本身并不是一个具体的事物,而是一个抽象的事物。只有真正的猫,狗才是具体的动物。同理,我们也可以推想,不同的动物吃