JAVA——多态

/*多态:可以理解为事物存在的多种体现形态。

猫 X = new 猫();
动物 X= new 猫();

1、多态的体现
父类的引用指向了自己的子类对象。
父类的引用也可以接收自己的子类对象。
2、多态的前提
必须是类与类之间有关系。要么继承,要么实现。
通常还有一个前提:存在覆盖。
3、多态的好处
多态的出现大大提高了程序的扩展性
4、多态的弊端
提高了扩展性,但是只能使用父类的引用访问父类中的成员。
5、多态成员函数的特点
在编译时期,参阅引用型变量所属的类中是否有调用的方法。如果有,编译通过,如果没有编译失败。
在运行时期:参阅对象所属的类中是否有调用的方法。
/*Fu f = new Zi();
f.method1();
f.method2();
编译时间看f也就是父类中是否有对应的方法,运行时看new Zi();也就是子类中是否有相应的方法。
简单总结就是:成员函数在多态调用时,编译看左边,运行看右边。*/
*/

/*
    在多态中,成员变量的特点:无论编译和运行,都参考左边(引用型变量所属的类)。
    在多态中,静态成员函数的特点:无论编译和运行,都参考左边。
    */
/*
需求:
动物,猫,狗
*/
abstract class Animal
{
    public 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)
    {
        //Animal a = new Cat();//类型提升,向上转型
    function(new Cat());
    function(new Dog());
    function(new Pig());

    }
    public static void function(Animal a)
    {
        a.eat();
    }
}
/*
基础的学生:
学习,睡觉
高级学生
学习,睡觉
可以将这两类事物进行抽取。
*/
abstract class Student
{
    public abstract void study();
    public void sleep()
    {
    System.out.println("躺着睡");
    }
}

class BaseStudent extends Student
{
    public void study()
    {
        System.out.print("base study ");
    }
    public void sleep()
    {
        System.out.print("坐着睡 ");
    }
}

class AdvStudent extends Student
{
    public void study()
    {
        System.out.print("adv study");
    }
}

class DoStu
{
    public  void Doing(Student stu)
    {
        stu.study();
        stu.sleep();

    }

}
class DuoTaiDemo3
{
    public static void main(String[] args)
    {
    // BaseStudent bs = new BaseStudent();
//         bs.study();
//  bs.sleep();
//
//  AdvStudent as = new AdvStudent();
//         as.study();
//  as.sleep();
    //Doing(new BaseStudent());
    DoStu ds = new DoStu();
    ds.Doing(new AdvStudent());

        System.out.println("Hello world");
    }

}

举例:电脑运行实例,电脑运行基于主板

interface PCI
{
    public void open();
    public void close();

}


class MainBoard
{
    public void run()
    {
       System.out.println("MainBoard run");
    }
    public void usePCI(PCI p)
    { 
        if(p!=null)
    {
        p.open();
        p.close();
    }
    }
}


class NetCard implements PCI
{
    public void open()
    {
    System.out.println("netcard open");
    }
    public void close()
    {
    System.out.println("netcard close");
    }   
}


class DuoTaiDemo5
{
    public static void main(String[] args)
   {

       MainBoard mb = new MainBoard();
       mb.run();
       mb.usePCI(new NetCard());
   }

}

运行结果:
MainBoard run
netcard open
netcard close

/*需求:数据库的操作
1.连接数据库             JDBC   Hibernate
2.操作数据库         create read update delete           
3.关闭数据库
*/

interface UserInfoDao
{
    public void add(User user);
    public void delete(User user);

}

class User
{

}
class UserInfoByJDBC implements UserInfoDao
{
    public void add(User user)
    {
        System.out.print("1.JDBC连接数据库2.使用sql添加语句添加数据3.关闭连接"); 
    }
    public void delete(User user)
    {
    System.out.print("1.JDBC连接数据库2.使用sql删除语句删除数据3.关闭连接");  

    }
}


class UserInfoByHiberate implements UserInfoDao
{
    public void add(User user)
    {
    System.out.print("1.Hiberate连接数据库2.使用sql添加语句添加数据;3.关闭连接"); 
    }
    public void delete(User user)
    {
        System.out.print(" 1.Hiberate连接数据库2.使用sql删除语句删除数据;3.关闭连接");
    }

}

class JDBC
{
    public static void main(String[] args)
    {
    UserInfoDao ui = new UserInfoByJDBC();
    ui.add(new User());
    ui.delete(new User());
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值