黑马程序员技术交流社区
标题:
Java基础学习日记 - 面向对象之多态
[打印本页]
作者:
qihuan
时间:
2015-7-5 21:58
标题:
Java基础学习日记 - 面向对象之多态
本帖最后由 qihuan 于 2015-7-6 21:20 编辑
/**
* 多态:可以理解为事物存在的多种体验形态。
* 多态自始至终都是子类对象在做着变化。
* 1.多态的体现
* 父类的引用指向了自己的子类对象。
* 父类的引用也可以接收自己的子类对象。
* 2.多态的前提
* 必须是类与类之间有继承或实现关系。
* 存在覆盖。
* 3.多态的好处
* 提高了程序的扩展性。
* 4.弊端
* 只能使用父类的引用访问父类的成员。
* 5.多态的应用
*
* 在多态中成员函数(非静态)的特点:
* 在编译时期,参阅引用型变量所属的类中是否有调用的方法,如果有,编译通过,没有则失败。
* 在运行时期,参阅对象所属的类中是否有调用的方法。
* 总结:成员函数在调用时,编译看左边,运行看右边。
*
* 在多态中成员变量的特点:
* 无论编译和运行,都参考左边(引用型变量所属的类)。
*
* 在多态中静态成员函数的特点:
* 无论编译和运行,都参考左边。
* @author Qihuan
*
*/
abstract class Animal {
abstract void eat();
}
class Cat extends Animal {
void eat() {
System.out.println("eat fish");
}
void catchMouse() {
System.out.println("catch mouse");
}
}
class Dog extends Animal {
void eat() {
System.out.println("eat bone");
}
void watchDoor() {
System.out.println("watch door");
}
}
public class PolyPractice {
public static void main(String[] args) {
// Animal cat = new Cat();//类型提升,向上转型
// cat.eat();
// Cat c = (Cat) cat;//强制将父类引用转成子类类型。向下转型。
// c.catchMouse();
function(new Dog());
}
public static void function(Animal a) {
a.eat();
if(a instanceof Cat){
Cat c = (Cat) a;
c.catchMouse();
}else if(a instanceof Dog){
Dog d = (Dog) a;
d.watchDoor();
}
}
}
复制代码
package practice;
/**
* 多态练习2
* 需求:电脑运行实例。
* @author Qihuan
*
*/
//PCI
interface PCI {
public void open();
}
//主板类
class MainBoard {
public void run() {
System.out.println("mainboard running");
}
public void usePCI(PCI p) {
if (p != null) {
p.open();
}
}
}
//网卡类
class NetCard implements PCI{
public void open() {
System.out.println("netcard running");
}
}
//声卡类
class SoundCard implements PCI{
public void open() {
System.out.println("soundcard running");
}
}
public class PolyPractice1 {
public static void main(String[] args) {
MainBoard mb = new MainBoard();
mb.run();
mb.usePCI(null);
mb.usePCI(new NetCard());
mb.usePCI(new SoundCard());
}
}
复制代码
作者:
hejin67410
时间:
2015-9-21 20:45
谢谢分享
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2