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

JAVA学习日志(8-1-多态)

2016-07-26 00:00 701 查看
多态:事物存在的多种体现形态

1.多态的体现

父类的引用指向了自己的子类对象

父类的引用接收了自己的子类对象

2.多态的前提

必须是类与类之间有关系,继承或实现

/*
无法编译
*/
abstract class Animal{
abstract void eat();
}

class cat extends Animal{
public void eat(){
System.out.println("Fish");
}
public void catchMouse(){
System.out.println("Catch Mouse");
}
}

class duotaiDemo{
public static void main(String[] args){
Animal x=new cat();
x.catchMouse;
}
}

存在覆盖

3.多态的优点

多态的出现大大的提高程序的扩展性

**提高了扩展性,但只能使用父类的引用访问父类中的成员

4.多态的应用

/*
动物,
猫,狗
*/
abstract class Animal{
abstract void eat();
}

class cat extends Animal{
public void eat(){
System.out.println("Fish");
}
public void catchMouse(){
System.out.println("Catch Mouse");
}
}
class dog extends Animal{
public void eat(){
System.out.println("Bone");
}
public void watch(){
System.out.println("Watch House");
}
}

class duotaiDemo{
public static void main(String[] args){
Animal c=new cat();
c.eat();
function(new dog());
}
public static void function(Animal x){
x.eat();
}
}


class duotaiDemo{
public static void main(String[] args){
Animal c=new cat();         //类型替身,向上转型
}
}

如果要实现猫特有方法

则需要强制将父类的引用转成子类类型

class duotaiDemo{
public static void main(String[] args){
Animal c=new cat();
c.eat();
cat d=(cat)c;    //向下转型
d.catchMouse();
}
}


不能将父类对象转为子类类型

多态自始至终都是子类对象在做着变化

Animal a=new Animal();
Cat c=(Cat)a;


判断指向的对象是否符合该类型:instanceof(通常用于有限的子类型|子类型的比较)

if(a instanceof Cat){}
else if(a instanceof Dog){}


多态实例

/*
基础班学生:
学习,睡觉
高级班学生:
学习,睡觉
可以将这两类事物进行抽取
*/
abstract class Student{
public abstract void study();
public void sleep(){
System.out.println("ZzzzZzz");
}
}
class doStudent{
public void doSome(Student stu){
stu.study();
stu.sleep();
}
}

class baseStudent extends Student{
public void study(){
System.out.println("Base_Study");
}
public void sleep(){
System.out.println("XxxxXxxxxx");
}
}
class advanceStudent extends Student{
public void study(){
System.out.println("Adv_Study");
}
}

class duotaiDemo2{
public static void main(String[] args){
doStudent ds=new doStudent();
ds.doSome(new baseStudent());
ds.doSome(new advanceStudent());
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: