您的位置:首页 > 编程语言 > Java开发

《java入门第一季》之面向对象(重头戏多态)

2016-05-06 09:16 525 查看
接下来介绍java第三大特性——多态性

/*
多态:同一个对象(事物),在不同时刻体现出来的不同状态。
举例:
猫是猫,猫是动物。
水(液体,固体,气态)。

多态的前提:
A:要有继承关系。
B:要有方法重写。
其实没有也是可以的,但是如果没有这个就没有意义。
动物 d = new 猫();
d.show();
动物 d = new 狗();
d.show();
C:要有父类引用指向子类对象。
父 f =  new 子();

用代码体现一下多态。

多态中的成员访问特点:
A:成员变量
编译看左边,运行看左边。
B:构造方法
创建子类对象的时候,访问父类的构造方法,对父类的数据进行初始化。
C:成员方法
编译看左边,运行看(右边)。
D:静态方法
编译看左边,运行看左边。
静态和类相关,算不上重写,所以,访问还是左边的

然而由于成员方法存在方法重写,所以它运行看右边。
*/
class Fu {
public int num = 100;

public void show() {
System.out.println("show Fu");
}

public static void function() {
System.out.println("function Fu");
}
}

class Zi extends Fu {
public int num = 1000;
public int num2 = 200;

public void show() {//对父类的方法重写
System.out.println("show Zi");
}

public void method() {//自己的方法
System.out.println("method zi");
}

public static void function() {//静态方法也要“重写”,其实不算是重写
System.out.println("function Zi");
}
}

class DuoTaiDemo {
public static void main(String[] args) {
//要有父类引用指向子类对象。
//父 f =  new 子();
Fu f = new Zi();
System.out.println(f.num);
//找不到符号,父类中没有num2
//System.out.println(f.num2);

f.show();
//找不到符号,父类中没有method()
//f.method();
f.function();
}
}
执行结果是:100

show Zi

function Fu

多态的弊端:

/*
多态的弊端:
不能使用子类的特有功能。
*/
class Fu {
public void show() {
System.out.println("show fu");
}
}

class Zi extends Fu {
public void show() {
System.out.println("show zi");
}

public void method() {
System.out.println("method zi");
}

}

class DuoTaiDemo3 {
public static void main(String[] args) {
//测试
Fu f = new Zi();
f.show();
f.method();//由于父类中没有method()。所以报错。错误描述:找不到符号
}
}
那么应该怎么解决这个问题呢?向下转型。会在下一篇文章中对向下转型做出介绍。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: