`
lixue_maomao
  • 浏览: 5753 次
  • 性别: Icon_minigender_2
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

java基础 多态,抽象类,接口

 
阅读更多

             在一次看了java基础视频,对多态,抽象类有了新的理解:
     1.多态
       多态就是一个引用(类型)在多种情况下的不同状态。
       比如:
      一个Animal,它有一个cry() 方法,但是,这个Animal自己也不确定它是什么动物,所以,也就不知道怎么叫。
     class Animal(){
     public  void cry(){

      Sysetm.out.println("不确定怎么叫。。。。");

                                  }
                           }

     在这里 我们有2个类,一个是dog() ,一个是cat(),他们同样会叫,这个时候他们知道自己怎么叫了,但他们     同样是一个Animal,这个时候可以从Animal继承了。

 

    class dog extends Animal(){

    public void cry(){

    //狗叫

    System.out.println("旺旺叫........");

}

}

 

    class cat  extends Animal(){

    public void cry(){

   //猫叫

   System.out.println("喵喵叫......");

 

}

}

  *值得注意的是,当我们想人dog叫的时候,我们就实例化一个dog类,想让猫叫就实例化一个cat(),那么当我们的子类越来越多的时候,管理起来就麻烦了,这个时候我们可以父类引用指向不同的子类对象。如:

    Animal  an=new dog();

    这时候 an.cry(); 就是调用dog的cry()方法。cry()是旺旺叫...

    同样:  Animal  an=new cat();  an.cry() .输出是 喵喵叫....

    这里体现的就是多态。当Animal没有这个cry()方法的时候,an.cry()是会出错的,是因为它无法通过父类的cry()找到子类的cry() .这里是一个方法覆盖。

 

 2.抽象类

 1.)从多态可以看出来 Animal()的cry方法不确定,当我们从父类继承过来时一直都是覆盖掉的,父类里的本身是没有用到过 ,这个时候我们可以写成抽象的方法 ,用abstract 来修饰。abstract public void cry(); 这个Animal类也要用abstract 修饰。 abstract class Animal{}

  2.)抽象类 我们还是可以像正常类一样继承的,但是这个时候,要实现它的所有抽象方法。

  这样真正体现了这个类设计的思想,他的意思是说,现在我还不知道你要干什么,但是一定会用,所以我留在这没有写, 是一个抽象的,只要你继承了这个抽象方法,那么你就必须要实现我的所有方法,你可以根据自己的情况,想怎么实现就怎么实现,比如,dog可以重新实现cry()想让它怎么叫就怎么叫。

  3.)抽象类是不能实例化的,因为连类本身它都不知道是干什么的,他是不完全的,他怎么能被实例化呢。

 4.)抽象类可以没有抽象方法,也就是说 编译器只要见到abstract了就知道是抽象方法了,同样也不能被实例化的。

  5.)  抽象类不能有主体,例如:abstract public void cry(){} 这是错的!!!!!

6.)抽象类中可以有实现了的方法,只要用abstract就不能有主体了。

 3.接口

 一个类实现了一个接口,那么这个类就可以交给接口来使用。

  比如:interface Usb{

       public void start(){

   System.out.println("开始工作了");

   }

   public void start(){

   System.out.println("停止工作了");

   }

}

//电话类

 class phone implement Usb{

public void start(){

   System.out.println("我是手机   开始工作了");

   }

   public void start(){

   System.out.println("我是手机   停止工作了");

   }

}

//电脑

class computer {

public void useUsb(Usb usb){

usb.start();

usb.stop();

}

}

 

当调用的时候,phone p=new phone();

                     computer c=new computer();

                     c.useUsb(p);//这是因为,phone实现了接口,所以可直接交给接口

 

 

1.)接口是更加抽象的抽象类

2.)接口中的变量是static的。在开发中,我们经常把变量放在接口中,做为全局变量使用。接口名.变量名

3.)接口不能继承其他类,可以实现其他接口

 

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics