JAVA---接口、内部类、多态

接口

有时我们需要从多个不相关的类中设计出一个子类型,而java继承是单继承的特点,无法满足 我们的需求,所以我们可以使用接口来达到多继承的目的。
        
 接口实际上就是一种规范制度。

接口的特点
     (1)接口使用interface关键字,而不是class
                 但是我们可以理解成接口是特殊的抽象类
     (2)接口里只能有抽象方法和常量
     (3)接口不能实例化,没有任何意义
     (4)接口不能提供构造方法                                   [gdk1.8以上版本支持静态方法和默认方法] 

接口中的常量
      默认使用修饰词为:public static final
接口中的方法
      默认使用public abstract 

接口的实现
   (1)子类可以实现接口中的抽象方法
   (2)使用implements关键字进行实现
   (3)如果子类没有实现所有抽象方法,那么子类需要使用abstract
   (4)子类可以实现多个接口,接口间使用逗号分开。 

接口间的继承
   (1)接口与接口之间可以使用继承。子接口继承了父接口的抽象方法
           
   (2)支持多继承 

多态 

父类型的变量引用子类型的对象 

向上造型

 (1)父类型的变量指向不同的子类型对象,调用的功能有不同的实现
     
        Animal a = new Dog();
        Animal a = new Cat();
        a.noise();//叫
  (2)不同的父类型变量指向同一个对象有不同的功能 
        ZhengYangDoor  a = new ZhengYangDoor();
              a.thefproof();//防盗
              a.openDoor();//开门
        InterA  ia = a ;
                ia.theftproof();
                ia.waterproof();
        Door d = a;
             d.openDoor();
             d.closeDoor(); 

 

 向下造型

将父类型(接口)的变量赋值给子类型的变量或者是其他父类型的变量(接口)的变量
                     Animal a = new Dog();
                     Dog dog = (Dog)a;
                     dog.吃骨头();
                     
                     Cat cat = (Cat)a;//编译通过,语法正确,运行期间,造型错误
                     cat.捕捉老鼠();
                     
                运行期间有可能会发生类造型异常:java.lang.ClassCastException
                     
                为了避免出现错误:我们需要使用关键字instanceof来判断对象是不是要转换成的类型
                     
                     if(a instanceof Cat){
                        Cat cat = (Cat)a;
                     } 

内部类 

是定义在一个类的内部的新类型。即内部类,另外一个类称之为外部类。 

分为:

         成员内部类:以类的成员来定义,可以使用任何修饰词来修饰

         匿名内部类:没有名字的类型,写在外部类的方法中,通常只用一次,不需要定义类的结构。
                               通常都是为了实现接口,抽象类或某一现有的类型的子类。 

--------------------较常用

         方法内部类:定义在方法中,相当于局部变量,仅限于在方法中使用 定义时不能使用修饰词,可以直接访问外部类的                               非静态成员变量。

         静态内部类:也是以类的成员来定义的,只不过多了一个修饰词static,可以直接访问外部类的静态成员。

--------------------不常用       

为什么需要需求建立匿名内部类:   
       当我们想使用某个类或抽象类或接口的子类对象时,因为只使用一次,此时可以不定义子类
       的结构,因此可以使用匿名内部类的写法。因为没有子类名称,在写法上用向上造型,等号
       后面是new 父类(){};【分号一定不能丢】
       大括号内重写接口或抽象类里的所有抽象方法,或重写某一个实现方法 

内部类的使用:
        创建对象:
             要先创建一个外部类的对象outer
             然后使用外部类对象去使用new调用内部类的构造器实例化
        Inner inner = outer.new Ineer(有参传参); 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值