Java基础-抽象和接口

一、抽象类和抽象方法:

1、abstract关键字的使用

(1)abstract:抽象的

(2)abstract可以用来修饰的结构:类、方法

  a、abstract修饰类:抽象类

        》此类不能是实例化 

        〉抽象类中一定有构造器,便于子类实例化时调用(涉及:子类对象实例化的全过程)

        》开发中,都会提供抽象类的子类,让子类对象实例化,完成相关的操作 

b、abstract修饰方法:抽象方法

        》抽象方法只有方法的声明,没有方法体

         〉包含抽象方法的类一定是抽象类;反之,抽象类中可以没有抽象方法

        》若子类重写了父类中的所有抽象方法(直接父类和间接父类)后,此子类方可实例化;若子类没有重写父类中的所有抽象方法后,次子类也是一个抽象类,子类需要使用abstract修饰

如下,继承中,可以重写抽象方法中的方法,加上方法体;也可以在抽象类前面加上abstract,这两个方式来继承抽象方法.

 2、抽象的应用场景

抽象类是用来模型化那些父类无法确定全部实现,而是由其子类提供具体实现的对象的类:父类提供抽象方法,子类可以显示的去继承,重写抽象方法

 3、abstract使用中的注意点

(1)abstract不能用来修饰:属性、构造器等结构

(2)abstract不能用来修饰私有方法、静态方法、final的方法、final的类

4、创建抽象类的匿名子类对象

  

二、接口:interface

1、接口的使用

(1)接口使用interface来定义

(2)java中,接口和类是并列的两个结构

(3)如何定义接口:定义接口中的成员

        (3.1)JDK7及以前:只能定义全局敞亮和抽象方法

                》全局常量:public static final的,但是书写时可以省略不写

                 〉抽象方法:public abstract的

             

        (3.2)JDK8及以后:除了定义全局常量和抽象方法外,还可以定义静态方法、默认方法(略)        

        (3.3)接口中不能定义构造器,意味着接口不可以实例化 

         (3.4)java开发中,接口都是通过类去实现(implement)的方式来使用

                如果实现类覆盖了接口中的所有抽象方法,则此实现类就可以实例化

                如果实现类没有覆盖接口中的所有抽象方法,则此实现类仍然是一个抽象类

2、接口的多实现和接口的继承性:

(1)可以实现多个接口弥补了java单继承的局限性

        格式:class AA extends BB implements CC,DD,EE

(2)接口和接口之间叫做继承,并且可以多继承

 

接口和类之间叫实现关系;类和类之间叫做继承关系

(3)接口的具体使用,体现多态性

(4)接口实际上可以看做是一种规范

eg:USB体现了一种规范;如下也体现了接口使用上的多态性

 eg2:

面向接口编程

(5)、 创建接口匿名实现类的对象

 3、接口的应用

(1)代理模式:

eg:

4、java8中接口的新特性

除了定义全局常量和抽象方法外,还可以定义静态方法、默认方法(略)   

(1)接口中定义的静态方法,只能通过接口来调用

(2)通过实现类的对象可以调用接口中的静态方法 ;如果实现类重写了接口的默认方法,调用时,仍然调用的是重写以后的方法    

eg:

 eg2:接口类中定义了method3,实现一个父类,也定义了method3,现在让其继承于父类的同时去实现接口

(3)结论:如果子类(或实现类)继承的父类和实现的接口中声明了同名同参数的方法,那么子类在没有重写此方法的情况下,默认调用的是父类中的同名同参数的方法.---》类优先原则

 

结果:

(4)如果实现类实现了多个接口,而这多个接口中定义了同名同参数的默认方法,那么在实现类没有重写此方法的情况下,会报错,这叫做接口冲突;那么就需要在实现类中重写此方法

eg:新增一个文件,下面没有父类,但是有多个接口,下面会报错

 

 解决报错:在实现类中重写此方法

如果有父类也不会报错   

(5)如何在子类(实现类)的方法中调用父类、接口中被重写的方法

 5、内部类的分类

(1)、java中允许将一个类A声明在另一个类B中,则类A就是内部类,类B称为外部类

(2)、内部类的分类:成员内部类(直接在类内定义一个类) VS 局部内部类(方法类,代码块内,构造器内)

  

(3)成员内部类:

        一方面,作为外部类的成员

                》调用外部内的结构

                〉可以被static修饰

                》可以被四种不同的权限修饰(private,protect,default,public)

        另一方面,作为一个类

                》类内可以定义属性、方法、构造器

                 〉可以用final修饰,表示此类不可被继承,言外之意,不使用final就可以被继承

                》可以被abstract修饰

(4)关注一下3个问题

a、如何实例化成员内部类的对象

eg:在上面截图代码的基础上:

b、如何在成员内部类中区分调用外部类的结构

 c、 开发中局部内部类的使用

方式二:匿名内部类 :创建接口匿名实现类的匿名对象

(5)局部内部类使用注意点(安卓开发需要特别注意):

 a、局部内部类的方法(show())中,如果调用局部内部类所声明的方法(method())中的局部变量的话,要求此局部变量声明为final的.(在jdk8以上,默认加上了final,jdk7下会报错)

 

 


版权声明:本文为xuruhua原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
THE END
< <上一篇
下一篇>>