黑马程序员——多态
来源:互联网 发布:adobe mac 破解版 编辑:程序博客网 时间:2024/05/16 08:14
------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------
人:男人,女人
动物:猫,狗
猫 x = 猫();
动物 x = 猫();
1,多态的体现
父类的引用指向了自己的子类对象。
父类的引用也可以接受自己的子类对象。
2,多态的前提
必须是类与类之间有关系,要么继承,要么实现。
通常还有一个前提:存在覆盖。
3,多态的好处
多态的出现大大的提高了程序的扩展性。
4,多态的弊端
提过了扩展性的,但是只能使用父类的引用访问父类中的成员。
5,多态的应用
6,多态的出现代码中的特点(多态使用的注意事项)
Fu f = new Zi();
多态中成员函数的特点:
在编译时期:参阅引用型变量所属的类中是否有调用的方法。如果有,编译通过,如果没有编译失败。即 参阅上述代码中的Fu
在运行时期:参阅对象所属的类中是否有调用的方法。即参阅上述代码中的Zi
简单总结:成员函数在多态调用时,编译看左边,运行看右边。
在多态中,成员变量的特点:
无论编译和运行,都参考左边(引用型变量所属的类)。
在多态中,静态成员函数的特点:
无论编译和运行,都参考左边(引用型变量所属的类)。
/*
动物:
猫,狗。
*/
// instanceof 关键字,a instanceof String 判断a是不是String类型
abstract class Animal
{
public abstract void eat();
public abstract void talk();
}
class Cat extends Animal
{
public void eat()
{
System.out.println("吃鱼");
}
public void talk()
{
System.out.println("喵喵~");
}
public void catchMouse()
{
System.out.println("抓老鼠");
}
}
class Dog extends Animal
{
public void eat()
{
System.out.println("吃骨头");
}
public void talk()
{
System.out.println("汪汪~");
}
public void kanJia()
{
System.out.println("看家");
}
}
class Pig extends Animal
{
public void eat()
{
System.out.println("饲料");
}
public void talk()
{
System.out.println("空空~");
}
public void gongDi()
{
System.out.println("拱地");
}
}
class DuoTaiDemo
{
public static void main(String[] args)
{
/*
Cat c = new Cat();
function(c);
Dog d = new Dog();
function(d);
Pig p = new Pig();
function(p);
*/
//Animal a = new Cat(); //类型提升。 向上转型。
//a.eat();
//如果想要调用猫的特用方法时,如何操作?
//强制将父类的引用,转成子类类型。 向下转型。
//Cat c = (Cat)a;//向下转型
//c.catchMouse();
/*
千万不要出现这样的操作,就是将父类对象转成子类对象。
我们能转换的是父类引用指向了自己的子类对象时,该引用可以被提升,也可以被转换。
多态自始至终都是子类对象在变化。
Animal a = new Animal(); //错误
Cat c = (Cat)a;
*/
/*
function(new Cat());
function(new Dog());
function(new Pig());
*/
/*
String a = "abc";
System.out.println(a instanceof String);
关键字instanceof,判断a是不是String类型
*/
}
public static void function(Animal a)
{
a.eat();
a.talk();
if(a instanceof Cat)
{
Cat c = (Cat)a;
c.catchMouse();
}
else if(a instanceof Dog)
{
Dog d = (Dog)a;
d.kanJia();
}
else if(a instanceof Pig)
{
Pig p = (Pig)a;
p.gongDi();
}
}
/*
public static void function(Cat c)
{
c.eat();
}
public static void function(Dog d)
{
d.eat();
}
public static void function(Pig p)
{
p.eat();
}
*/
}
0 0
- 黑马程序员—多态
- 黑马程序员—多态
- 黑马程序员—多态
- 黑马程序员——多态
- 黑马程序员——多态
- 黑马程序员——多态
- 黑马程序员——多态
- 黑马程序员——多态
- 黑马程序员——多态
- 黑马程序员——多态
- 黑马程序员——多态
- 黑马程序员——多态
- 黑马程序员——多态
- 黑马程序员——多态
- 黑马程序员—泛型
- 黑马程序员—多线程
- 黑马程序员—DOM
- 黑马程序员—javabean
- iOS 获取网络类型
- Deruio制作 树莓派用户手册V002
- Java Serializable(序列化)的理解
- Java时间格式化
- GDB安装
- 黑马程序员——多态
- 操作系统中的进程与线程
- PHP + AJAX实现幸运大转盘抽奖
- 别上“绵羊墙”多丢脸啊!
- String对象相关介绍
- java的NIO管道用法
- Jackson第一篇【JSON字符串、实体之间的相互转换】
- 【产品经理】产品经理之我述
- 显示调用共享内存dll