黑马程序员 --java基础--多态

——- android培训java培训、期待与您交流! ———-
我热爱我的热爱,并将继续坚持我的热爱,生活终会好起来,我会是那匹黑马。
一、多态 :可以理解为 事物存在的多种体现形式
1:多态在程序中 的体现;
父类的引用指向了自己子类的对象
父类的引用也可以接受自己子类的对象
2:多态的前提
必须是类与类之间有关系,要么继承要么实现
存在覆盖
3:多态的好处
大大提高了程序的扩展性
4:多态的弊端
只能使用父类的引用访问父类中的成员

abstract class Animal
{
 abstract void eat();
}

class Cat extends Animal
{
 public void eat()
 {
  System.out.println("吃鱼");
 }
 public void catchMouse()
 {
  System.out.println("抓老鼠");
 }
}


class Dog extends Animal
{
 public void eat()
 {
  System.out.println("吃骨头");
 }
 public void kanJia()
 {
  System.out.println("看家");
 }
}


class Pig extends Animal
{
 public void eat()
 {
  System.out.println("饲料");
 }
 public void gongDi()
 {
  System.out.println("拱地");
 }
}

class DuoTaiDemo
{
 public static void main(String[] args)
 {
  //Cat c = new Cat();
  //c.eat();
  //Dog d = new Dog();
  //d.eat();
  //Cat c = new Cat();
  //Animal c = new Cat(); // 类型提升   也称为向上转型
//如果想要调用猫的特有方法,怎么操作;
//强制将父类的引用转成子类类型。向下转型;
//多态始终是子类对象在做着变化
  //c.eat();


  function(new Cat());
  function(new Dog());
  function(new Pig());
 }
 public static void function(Animal a)
 {
  a.eat();
 }
 /*
 public static void function(Animal c)
 {
  c.eat();
  if(c instanceof Cat){
        Cat cc=(Cat)c;
        c.catchMouse();
}
 }
 public static void function(Dog d)
 {
  d.eat();
 }
 */
}

二、多态注意事项

举例说明:
学生:
学习,睡觉。
可以将这两类事物进行抽取。

abstract class Student
{
     public abstract void study();
     public void sleep()
     {
          System.out.println("躺着睡");
     }
}

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("坐着睡");
     }
}
class AdvStudent extends Student
{
     public void study()
     {
          System.out.println(" adv study");
     }
}
class DuoTaiDemo3
{
     public static void main(String[] args)
     {
          DoStudent ds = new DoStudent();
          ds.doSome(new BaseStudent());
          ds.doSome(new AdvStudent());
     }
}

多态中成员 的特点

函数特点:
编译时,参阅引用性变量所属的类中是否有调用的方法有,通过;否则失败,运行时,参阅对象所属的类中是否有调用的方法。
总结:成员函数在多态调用时,编译看左边,运行看右边

多态中,成员变量,无论编译运行都参考左边(引用行变量所属的类);
多态中,静态函数,不论编译和运行都参考左边

多态的主板示例

interface  PCI
{
    public void open();

    public void close();
}
class  NerCard  implements PCI{
    public void open(){ System.out.println("NerCard  open");  }
     public void close (){ System.out.println("NerCard  close ");  }
}
class  SoundCard  implements PCI{
    public void open(){ System.out.println("SoundCard  open");  }
     public void close (){ System.out.println("SoundCard  close ");  }
}
class  MainBoard{
    public void run(){
            System.out.println("MainBoard  run");
        }
    public void usePCI(PCI p){//接口型引用指向实现类的对象
        if(0!=null){
            p.open();
            p.close();
        }
        }
}
class DuoTaiDemo
{
 public static void main(String[] args)
 {
        MainBoard m=new MainBoard();
        m.run();
        m.usePCI(null);
        m.usePCI(new NerCard ( ) );
        m.usePCI(new SoundCard  ( ) );


 }
} 

多态的扩展示例

需求:数据库的操作
1:连接数据库
2:操作数据库
增删改查 create read update delete
3:关闭数据库连接

class  UserInfoByJdbc
{
    public void  add(User user)
    {
            jsbc 连接数据库操作;
    }
}
class  UserInfoByHibernate implements UserInfoDao
{
    public void  add(User user)
    {
           Hibernate连接数据库操作;
    }
}
interface UserInfoDao
{
    public void add();
}
class DBoperate  implements UserInfoDao
{
        public static void main(String args[])
        {
          /* UserInfoByJdbc   uj=new UserInfoByJdbc   ();
          UserInfoByHibernate uh=new UserInfoByHibernate ();*/
             UserInfoDao ud= new UserInfoByJdbc   ()  ;
             ud.add();
        }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值